我遇到了以下Django模板上下文处理器问题。
上下文处理器在myapp/context_processors.py
:
def my_context_processor(request):
return {
'foo': 123,
}
它与settings.py以及标准Django上下文处理器连接:
TEMPLATE_CONTEXT_PROCESSORS = (
'django.contrib.auth.context_processors.auth',
'django.core.context_processors.debug',
'django.core.context_processors.i18n',
'django.core.context_processors.media',
'myproject.myapp.context_processors.my_context_processor',
)
我遇到的问题是my_context_processor并未应用于所有请求。
未应用以下代码:
def index(request):
return render_to_response("index.html", locals())
但是,已应用以下代码:
def index(request):
return render_to_response("index.html", locals(), context_instance=RequestContext(request))
我的印象是上下文处理器适用于所有请求,而不仅仅是在提供context_instance
时。
如何让我的上下文处理器应用于所有请求?
答案 0 :(得分:11)
您已回答了自己的问题。它适用于使用RequestContext
的响应。它不适用于没有的那些。
将其应用于所有响应的方法是确保始终使用RequestContext。或者,在Django 1.3+中,您可以使用新的render
快捷方式而不是render_to_response
,它会为您创建一个RequestContext。
答案 1 :(得分:3)
Django在Django 1.3中引入了一个新的render
快捷方式,它自动包含RequestContext
from django.shortcuts import render
def my_view(request):
# View code here...
context = {
'some_extra_var_for_template': 'value'
}
return render(request, 'myapp/index.html', context)
您可以在Django docs。
中阅读相关内容答案 2 :(得分:0)
上下文处理器变量仅在将RequestContext
对象(使用当前请求初始化)作为context_instance
发送到模板时可用。