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

1 投票
3 回答
977 浏览
提问于 2025-04-15 22:31

假设我在写一个Django应用,而这个应用里的所有模板都需要一个特定的变量。

据我所知,处理这个问题的“经典”方法是写一个上下文处理器,然后把它添加到settings.py里的TEMPLATE_CONTEXT_PROCESSORS中。

我的问题是,这样做是否正确,因为应用应该是和实际使用它们的项目“独立”的?

换句话说,当把这个应用部署到一个新项目时,有没有办法让项目不需要明确去调整它的设置?

3 个回答

-1

是的,添加一个上下文处理器是实现这个功能的最推荐方法。

1

上下文处理器非常有用,我会大胆地使用它们,但在某些情况下,使用它们可能不太合适。

这是我在需要在应用的所有视图中包含一些简单内容时使用的一种技巧。我不能保证这是“正确”的做法,但对我们团队来说,这种方法有效:

我会在文件的顶部声明一个全局字典 template_vars。每个视图都会把自己的变量添加到这个字典中,然后把它传递给模板,最后在 render_to_response 快捷方式中返回 template_vars

它看起来像这样:

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

你认为可以在项目中随便添加应用而不需要调整项目设置,这个想法是不对的。

如果你想在项目中添加一个应用,你必须修改设置,因为你需要把它加入到 INSTALLED_APPS 这个列表里。

那么,为什么不直接修改上下文处理器的列表呢?

撰写回答