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