2011-01-03 13 views
2

私は[home | the office]にあるかどうかに基づいて "Call Me"ボタンを有効/無効にする機能をアプリケーションに追加しようとしています。私は設定と呼ばれるデータベースにモデルを作成しました。これは次のようになります:dbに基づくテンプレートへの変数の受け渡し

class setting(models.Model): 
    key = models.CharField(max_length=200) 
    value = models.CharField(max_length=200) 

かなり簡単です。現在、使用可能な行が1つあり、その値は文字列Trueです。

{% if available %} 
    <!-- Display button --> 
{% else %} 
    <!-- Display grayed out button --> 
{% endif %} 

今、私は、データベースをチェックするすべてのビューにロジックを追加し、テンプレートに変数を渡すこともできますが、私がしようとしている:私は透過的に、このようなテンプレートに変数を渡すことができるようにしたいです滞在DRY

これを行うにはどのような方法が最適ですか?

私はコンテキストプロセッサを作成し、それがTEMPLATE_CONTEXT_PROCESSORSへのパスだが、それは

def available(request): 
available = Setting.objects.get(key="available") 
if open.value == "True": 
    return {"available":True} 
else: 
    return {} 

UPDATE TWO ショートカットrender_to_responseを使用している場合は、テンプレートに渡されていない追加 UPDATE RequestContextのインスタンスを関数に渡す必要があります。 django documentationから

あなたが辞書の内容でテンプレートを移入するDjangoのrender_to_response()ショートカットを使用している場合は、あなたのテンプレートは、デフォルト(ないRequestContextの)によってコンテキストのインスタンスが渡されます。テンプレートレンダリングでRequestContextを使用するには、render_to_response()にオプションの第3引数、つまりRequestContextインスタンスを渡します。

def some_view(request): 
    # ... 
    return render_to_response('my_template.html', 
           my_data_dictionary, 
           context_instance=RequestContext(request)) 

すべての助けに感謝:あなたのコードは次のようになります!

答えて

4

custom context processorを書きます。

+0

これはかなり良いようです!私はそれを試してみて、報告します。 –

+0

コンテキストプロセッサは*これまで最高の*です。それは幼稚なと聞こえますが、とても役に立ちます。私はすべてのテンプレートにユーザーのFacebookのプロフィール情報を渡すために自分で書いたコンテキストプロセッサを使用します。これは非常に単純な関数なので、辞書を返すだけで実装するのは簡単です。 TEMPLATE_CONTEXT_PROCESSORSのデフォルトのコンテキストプロセッサーを変更する場合は、デフォルトのコンテキストプロセッサーと設定しないでください。 –

+0

したがって、settings.pyにTEMPLATE_CONTEXT_PROCESSORSを追加するだけですか? –

関連する問題