Django视图默认值到模板

1 投票
1 回答
642 浏览
提问于 2025-04-17 19:52

有没有办法把一个变量传递给所有的模板?比如说,我有一个视图,其中包含了

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)

撰写回答