你会想写一个自定义context processor。
上下文处理器有一个非常简单的接口:这只是一个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"
)
P.S:如果您使用的render
代替render_to_response
,你并不需要通过RequestContext
。
render('page.html', dictionary)
嗨,这看起来非常简单和好,但我已经在settings.py默认设置,而'TEMPLATE_CONTEXT_PROCESSORS + =(‘project.context_processors.add_extra_variable’,)'行打破它,因为它不存在。如果我只是简单地等于它,那么它会错过其他的东西,比如'django.contrib.auth.context_processors.auth'。任何想法我怎么能解决它? – user2194805 2013-03-21 12:30:54
全写(编辑我的答案)。 (或者'from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS')。 – 2013-03-21 12:32:45
哦,它完美的工作。非常感谢 :- )。 – user2194805 2013-03-21 12:48:01