1

すべてのテンプレートに変数を渡す方法はありますか? たとえば、次を含むビューがあります

render_to_response('page.html', dictionary, \
context_instance = RequestContext(request))

辞書にないテンプレートファイルに別の変数を渡したいと思います。

目的は何ですか?すべてのビュー (数百) でこの変数が必要だとしましょう。単純に、辞書に触れずにこの変数をテンプレート ファイルに渡したいと考えています。ちなみに、この変数はパラメータ(リクエスト)を持つ関数の結果です。

それは実行可能ですか?

4

1 に答える 1

6

カスタムコンテキスト プロセッサを作成する必要があります。

コンテキスト プロセッサのインターフェイスは非常に単純です。これは、1 つの引数 (HttpRequestオブジェクト) を受け取り、テンプレート コンテキストに追加される辞書を返す単なる Python 関数です。各コンテキスト プロセッサは辞書を返す必要があります。

カスタム コンテキスト プロセッサは、コード ベースのどこにでも配置できます。Django が気にするのは、カスタム コンテキスト プロセッサがTEMPLATE_CONTEXT_PROCESSORS設定によってポイントされることだけです。

例えば:

# in project/context_processors.py
def add_extra_variable(request):
    return {'extra': myfunction(request)}

# in settings.py:
TEMPLATE_CONTEXT_PROCESSORS = (
    "django.contrib.auth.context_processors.auth",
    "django.core.context_processors.debug",
    "django.core.context_processors.i18n",
    "django.core.context_processors.media",
    "django.core.context_processors.static",
    "django.core.context_processors.tz",
    "django.contrib.messages.context_processors.messages",
    "project.context_processors.add_extra_variable"
 )

 

PS:renderの代わりにを使用する場合render_to_response、 を渡す必要はありませんRequestContext

render('page.html', dictionary)
于 2013-03-21T11:18:36.610 に答える