Django视图默认值到模板
有没有办法把一个变量传递给所有的模板?比如说,我有一个视图,其中包含了
render_to_response('page.html', dictionary, \
context_instance = RequestContext(request))
我想把另一个变量传递给模板文件,但这个变量不在字典里。
这样做的目的是什么呢?假设我需要在所有的视图中使用这个变量(大概有几百个),我希望能把这个变量传递给模板文件,而不需要去修改字典。顺便提一下,这个变量是一个函数的结果,这个函数有一个参数(请求)。
这样做可以吗?
1 个回答
6
你需要写一个自定义的 上下文处理器。
上下文处理器的接口非常简单:它就是一个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"
)
附注:如果你使用 render
而不是 render_to_response
,你就不需要传递 RequestContext
。
render('page.html', dictionary)