django 根据请求向所有视图添加上下文

Posted

技术标签:

【中文标题】django 根据请求向所有视图添加上下文【英文标题】:django add context based on request to all views 【发布时间】:2015-11-16 13:40:08 【问题描述】:

如果请求中有一个参数,例如 nv=false,我需要在没有导航栏的情况下呈现我的站点,并且我想基于此将变量传递给上下文,以便主模板显示或不显示块。我的网站也有很多 json-rpc 函数,我不想在上面增加额外的开销。在不重写所有视图的情况下如何做到这一点? (它们不是基于类的,我的网站使用 django 1.8)

【问题讨论】:

How do I pass variables to all templates in django?的可能重复 不,它不是,需要处理请求然后传递一个变量,上下文处理器为我做了:) 【参考方案1】:

只需添加上下文处理器即可将此变量添加到上下文中。上下文处理器是一个简单的python函数

def navbar(request):
    return 'navbar_enabled': request.GET.get('nv', False)

并将其添加到模板上下文处理器列表中

TEMPLATE_CONTEXT_PROCESSORS = (
    ...
    'MODULE_NAME.navbar',
    ...
)

【讨论】:

如果您使用新的TEMPLATES 设置在Django 1.8+ 中,请在TEMPLATES 设置中设置context_processors 选项,而不是TEMPLATE_CONTEXT_PROCESSORS 我有一个请求过滤器现在已损坏,当此过滤器获取它时,我的请求是一个空字符串!怎么了? 我明白了,请求对象不再使用新的 SETTINGS 对象传递给模板,我认为应该在文档中某处 docs.djangoproject.com/en/1.8/ref/settings/… 其他人可能会好奇放置自定义上下文处理器的好地方在哪里。我在两个独家新闻中看到的模式只是在<your_app_name>.context_processors 中。

以上是关于django 根据请求向所有视图添加上下文的主要内容,如果未能解决你的问题,请参考以下文章

django 中的上下文处理器与中间件

14-中间件和上下文处理器

我可以通过 django 视图访问装饰器中的上下文对象吗

django框架--视图系统

在所有视图django中获取用户上下文?

对于 Django 模板 %url% 标签,我如何从通用视图上下文中找到所有 URL 参数,而不仅仅是最后一个?