Django将默认值视为模板

时间:2013-03-21 11:15:08

标签: python django templates views

有没有办法将变量传递给所有模板?例如,我有一个包含

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

我想将另一个变量传递给不在字典中的模板文件。

目的是什么?假设我在所有视图中都需要这个变量(几百个),而且我很乐意将这个变量传递给模板文件而不需要触及字典。顺便说一下,这个变量是一个函数的结果,它有一个参数(request)。

可行吗?

1 个答案:

答案 0 :(得分:6)

您需要撰写自定义context processor

  

上下文处理器有一个非常简单的接口:它只是一个Python函数,它接受一个参数,一个HttpRequest对象,并返回一个添加到模板上下文的字典。每个上下文处理器必须返回字典。

     

自定义上下文处理器可以存在于代码库中的任何位置。所有Django都关心的是您的TEMPLATE_CONTEXT_PROCESSORS设置指向您的自定义上下文处理器。

E.g:

# 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"
 )

P.S。:如果您使用render代替render_to_response,则无需传递RequestContext

render('page.html', dictionary)