代码之家  ›  专栏  ›  技术社区  ›  Edan Maor

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

  •  0
  • Edan Maor  · 技术社区  · 14 年前

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

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

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

    换句话说,当将该应用程序部署到一个新项目时,是否有任何方法可以避免该项目必须明确地混淆其设置?

    3 回复  |  直到 14 年前
        1
  •  1
  •   Olivier Verdier    14 年前

    您假设应用程序可以不接触项目的设置就添加到项目中,这是不正确的。

    如果将应用程序添加到项目中, 您必须编辑设置 ,因为您必须将它添加到 INSTALLED_APPS 元组。

    那么,为什么不编辑上下文处理器列表呢?

        2
  •  1
  •   digitaldreamer    14 年前

    上下文处理器是非常有用的,我不会太害羞地使用它们,但在某些情况下,它是没有意义的。

    当我需要在一个应用程序中包含一些简单到所有视图时,这是我使用的一种技术。我不能证明这是做事情的“正确”方式,但它对我们的团队有效:

    我要申报一本全球词典 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))
    
        3
  •  0
  •   phoenix24    14 年前

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