有没有办法将变量传递给所有模板?例如,我有一个视图,其中包含
render_to_response('page.html', dictionary, \
context_instance = RequestContext(request))
我想将另一个变量传递给不在字典中的模板文件。
目的是什么?假设我在所有视图(几百个)中都需要这个变量,而且我很想在不接触字典的情况下将这个变量传递给模板文件。顺便说一下,这个变量是一个函数的结果,它有一个参数(请求)。
可行吗?
您需要编写一个自定义上下文处理器。
上下文处理器有一个非常简单的接口:它只是一个 Python 函数,它接受一个参数,一个
HttpRequest
对象,并返回一个字典,该字典被添加到模板上下文中。每个上下文处理器必须返回一个字典。自定义上下文处理器可以存在于代码库中的任何位置。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)