如何从Django应用中添加上下文处理器
-
04-10-2019 - |
题
假设我正在编写Django应用程序,并且该应用中的所有模板都需要一个一个变量。
处理此问题的“经典”方法是编写上下文处理器,并将其添加到settings.py中的template_context_processor。
我的问题是, ,考虑到应用程序应该与实际项目“独立”,这是正确的方法吗?
换句话说,将该应用程序部署到新项目时,是否有任何方法可以避免该项目必须明确弄乱其设置?
解决方案
您假设可以在项目中添加应用程序而无需触摸项目设置是不正确的。
如果您将应用程序添加到项目中, 您必须编辑设置, ,因为您必须将其添加到 INSTALLED_APPS
元组。
那么,为什么不编辑上下文处理器列表呢?
其他提示
上下文处理器非常有用,我不会太害羞地使用它们,但是在某些情况下,这是没有意义的。
当我需要在应用程序中包含所有视图的内容时,这是我使用的技术。我无法证明这是做事的“正确”方法,但它对我们的团队有效:
我会声明全球词典 template_vars
在文件的顶部。每个视图都会将自己的变量添加到本字典中并将其传递给模板,然后返回 template_vars
在里面 render_to_response
捷径。
看起来像这样:
template_vars = {
'spam': 'eggs',
}
def gallery(request):
"""
portfolio gallery
"""
template_vars['projects'] = Projects.objects.all()
return render_to_response('portfolio/gallery.html', template_vars, context_instance=RequestContext(request))
是的,添加上下文处理器是实现这一目标的最推荐方法。
不隶属于 StackOverflow