我有一个继承自Listview的CBV。
我需要:
如果查询集中没有元素,为空,我需要显示 带有不同消息或其他模板的模板
如果查询集中只有一个元素我需要去(重定向) 到DetailView
基于我之前收到的一些问题(在其他问题上),我认为我需要覆盖get。
如果我完全改变了get,我关心的是,稍后,如果改变行为,可以创建问题(它还有分页,与上下文相关的代码)。
如果我调用super()
并将get存储在变量中,我如何知道/获取get_queryset的结果?
答案 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方法。