假设我正在编写一个Django应用程序,应用程序中的所有模板都需要一个变量。
afaik处理此问题的“经典”方法是编写上下文处理器并将其添加到settings.py中的TEMPLATE_CONTEXT_PROCESSORS。
我的问题是,考虑到应用程序应该与使用它们的实际项目“独立”,这是正确的方法吗?
换句话说,在将该应用程序部署到新项目时,是否有任何方法可以避免项目明确地弄乱其设置?
答案 0 :(得分:1)
上下文处理器非常有用,我不会太害羞地使用它们,但在某些情况下它没有意义。
当我需要在应用中为所有视图添加简单内容时,这是我使用的一种技术。我无法证明这是做事的“正确”方式,但它适用于我们的团队:
我将在文件顶部声明一个全局字典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))
答案 1 :(得分:1)
您认为可以在项目中添加应用而不触及项目设置的假设是不正确的。
如果您向项目添加应用程序,您必须编辑设置,因为您必须将其添加到INSTALLED_APPS
元组中。
那么为什么不编辑上下文处理器列表?
答案 2 :(得分:0)
是的,添加上下文处理器是实现此目的的最佳方法。