私はすべてのビューに特定の変数(ほとんどがカスタム認証タイプの変数)を渡す必要があります。
これを行うには、独自のコンテキストプロセッサを書くことが最善の方法であると言われましたが、いくつかの問題があります。
私の設定ファイルは次のようになります
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.contrib.messages.context_processors.messages",
"sandbox.context_processors.say_hello",
)
ご覧のとおり、「context_processors」というモジュールと、その中の「say_hello」という関数があります。
どのように見える
def say_hello(request):
return {
'say_hello':"Hello",
}
自分の意見の中で次のことができるようになったと思いますか?
{{ say_hello }}
今のところ、これは私のテンプレートでは何もレンダリングしません。
私の見方は
from Django.shortcuts import render_to_response
def test(request):
return render_to_response("test.html")
作成したコンテキストプロセッサは動作するはずです。問題はあなたの意見です。
ビューがRequestContext
でレンダリングされていることを確信していますか?
例えば:
def test_view(request):
return render_to_response('template.html')
上記のビューでは、TEMPLATE_CONTEXT_PROCESSORS
にリストされているコンテキストプロセッサは使用されません。次のようにRequestContext
を指定していることを確認してください。
def test_view(request):
return render_to_response('template.html', context_instance=RequestContext(request))
Django docs によると、context_instance引数でrender_to_responseの代わりにrender
をショートカットとして使用できます。
または、
render()
ショートカットを使用します。これは、requestContextの使用を強制するcontext_instance引数を指定したrender_to_response()の呼び出しと同じです。
Django 1.8であるため、次のようにカスタムコンテキストプロセッサを登録します。
TEMPLATES = [
{
'BACKEND': 'Django.template.backends.Django.DjangoTemplates',
'DIRS': [
'templates'
],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'Django.template.context_processors.debug',
'Django.template.context_processors.request',
'Django.contrib.auth.context_processors.auth',
'Django.contrib.messages.context_processors.messages',
'www.context_processors.instance',
],
},
},
]
コンテキストプロセッサがappにあると仮定するとwww
in context_processors.py
Djangoのrender_to_response()
ショートカットを使用してテンプレートに辞書の内容を入力している場合、テンプレートにはデフォルトでContextインスタンス(RequestContext
ではなく)が渡されます。テンプレートレンダリングでRequestContext
を使用するには、render()
の呼び出しと同じであるrender_to_response()
ショートカットを使用し、_context_instance
_引数を使用してRequestContext
の使用。