如何从Django应用程序添加上下文处理器

时间:2010-05-09 14:12:33

标签: python django django-apps

假设我正在编写一个Django应用程序,应用程序中的所有模板都需要一个变量。

afaik处理此问题的“经典”方法是编写上下文处理器并将其添加到settings.py中的TEMPLATE_CONTEXT_PROCESSORS。

我的问题是,考虑到应用程序应该与使用它们的实际项目“独立”,这是正确的方法吗?

换句话说,在将该应用程序部署到新项目时,是否有任何方法可以避免项目明确地弄乱其设置?

3 个答案:

答案 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)

是的,添加上下文处理器是实现此目的的最佳方法。