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 根据请求向所有视图添加上下文的主要内容,如果未能解决你的问题,请参考以下文章