根据queryset中结果的nuber更改模板和CBV

时间:2017-12-10 15:06:00

标签: django django-queryset

我有一个继承自Listview的CBV。

我需要:

  1. 如果查询集中没有元素,为空,我需要显示 带有不同消息或其他模板的模板

  2. 如果查询集中只有一个元素我需要去(重定向) 到DetailView

  3. 基于我之前收到的一些问题(在其他问题上),我认为我需要覆盖get。

    如果我完全改变了get,我关心的是,稍后,如果改变行为,可以创建问题(它还有分页,与上下文相关的代码)。

    如果我调用super()并将get存储在变量中,我如何知道/获取get_queryset的结果?

1 个答案:

答案 0 :(得分:2)

简单的解决方案是覆盖CBV中的get_template_names方法。

class MyCBV(django.views.generic.TemplateView):
    ...
    def get_template_names(self):
        if not self.queryset.count():
            return ["custom_template1.html", ]
        elif self.queryset.count() == 1:
            return ["custom_template2.html", ]
        else:
            return ["default_template.html", ]
希望它有所帮助。我认为重写get_template_names是更好的主意,而不是得到,因为get做了一些其他应该重写的事情,所以保持DRY我的建议是覆盖get_template_names方法。