假设我正在编写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))

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top