Django将不同应用程序的上下文传递给一个模板

时间:2015-02-11 19:17:16

标签: python django templates

我有一个django项目,其中注册了几个应用程序。它们中的每一个都呈现自己的模板,所有这些都扩展了相同的基本模板。现在我想将数据传递给这个基本模板,而不是让所有应用程序都这样做。 (这将是相当大的开销)我想使用自定义模板标签这样做,但我在这里完全失去了关于可能性和操作方法。任何提示或建议?

1 个答案:

答案 0 :(得分:1)

创建一个Mixin并覆盖get_context_data(),将所有常见内容添加到其中,将此mixin添加到需要此行为的所有视图中

class CommonMixin(object):
    def get_context_data(self, **kwargs):
        context = super(CommonMixin, self).get_context_data(**kwargs)
        context['common_value'] = 'VALUE1'
        return context


class App1View(CommonMixin, ListView):
     ...


class App2View(CommonMixin, CreateView):
    ...

如果您使用功能视图,请编写一个充当get_context_data的函数并在每个视图中使用它。

您可以创建自定义标记,但这可能会带来更多的计算成本。

另一种方法可以是编写自定义context processor,但这会影响您的所有观看次数。