在数据库中,我有一组问题。我想将可折叠项目中的每个问题显示为列表。以前我用的是TemplateView:
class questionmanager(TemplateView):
template_name = 'questionmanager.html'
questions = Question.objects.all()
def get_context_data(self, **kwargs):
context = ({
'questions': self.questions,
})
return context
然后,我读到使用ListView更好的做法来表示对象列表。然后我改变了我的课程:
class QuestionListView(ListView):
model = Question
def get_context_data(self, **kwargs):
context = super(QuestionListView, self).get_context_data(**kwargs)
return context
在旧模板中,我将其用于循环:
{% for question in questions %}
我认为当我使用ListView而不是TemplateView时,我不需要使用for循环;但我无法列出没有for循环的项目。我找到了一个示例here,在我看来,唯一的区别是在for循环中我们使用 object_list ({% for question in **object_list** %}
)而不是使用我们传入的参数背景。
我真的没有看到使用TemplateView和ListView之间的这么多差异 - 花了一个小时就可以了。如果有人解释为什么使用ListView而不是TemplateView是一种更好的做法(在这种情况下),我将不胜感激。
提前致谢。
答案 0 :(得分:6)
对于这样的简单用例,没有太大区别。但是,此示例中的ListView
更加清晰,因为它可以简化为:
class QuestionListView(ListView):
model = Question
考虑到你没有把任何东西放在上下文中。 TemplateView's
作为基本视图是相当基础的,并且提供了一组更小的方法和属性来处理更复杂的用例,这意味着您必须在这样的实例中编写更多代码。如果您在这里查看并比较两个观看次数TemplateView和ListView,您可以更清楚地看到差异。分页是一个很好的例子,为ListView
分页只需设置paginate_by
属性并相应地修改模板。
另请注意,您可以通过在“ListView”中设置object_list
来更改默认名称context_object_name