【问题标题】:Django template inheritance: repetitive viewsDjango模板继承:重复视图
【发布时间】:2014-06-11 18:50:11
【问题描述】:

我有一个名为 ListAEQ 的视图:

class ListAEQ(MixinView, ListView):
    template_name = 'allometric/aeq_list.html'
    model = Equation

    def get_queryset(self):
        return (Equation.objects.filter(owner=self.request.user))

我想通过不同的模板多次使用此视图中的查询集。例如,我有一个扩展 aeq_list.html 的模板,它将父模板中的一个块替换为不同的内容。如何使用相同的视图但不同的模板呈现此内容,而不必创建具有相同查询集和不同 tempate_name 的多个视图。我相信有一种方法可以根据“DRY”原则来做到这一点

例如,我会创建一个新视图

class ListAEQindia(MixinView, ListView):
    template_name = 'allometric/aeq_list_india.html'
    model = Equation

    def get_queryset(self):
        return (Equation.objects.filter(owner=self.request.user))

【问题讨论】:

    标签: django django-views template-inheritance


    【解决方案1】:

    您没有说明如何确定要呈现哪个模板。但假设它基于 URL 中的参数,您可以在视图中定义 get_template_names方法。

    该方法可以访问 self.kwargs 和 self.request 等,然后返回一个包含要使用的模板名称的列表。 (请注意,它必须是一个列表,即使该列表只包含一项。)

    【讨论】:

    • 所以在 ListAEQ(MixinView, ListView) 内部:我会定义 def get_template_names(): 并让该函数返回一个包含所有可能子模板的列表?
    • 不,考虑到请求,您让它返回单个相关模板。
    • 啊,我明白了!所以我使用逻辑根据 kwargs 确定 template_name,然后将 template_name 设置为我想要的模板
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    • 2011-02-04
    • 2015-11-13
    相关资源
    最近更新 更多