在Django中有一个名为YearArchiveView
的通用视图,它有一个名为make_object_list
的属性。
有人可以向我解释为什么这个选项实际存在吗?
如果我想要一个基于年份的查询集是不合逻辑的,那么很明显我需要一个对象列表,即使它只有一个对象。 或者我在这里误解了一些东西。
答案 0 :(得分:1)
TLDR; make_object_list
在object_list
下的视图上下文中返回给定YearArchiveView的所有对象。默认情况下,make_object_list
为False,这将导致返回的上下文object_list
为空。
所以django documentation在这方面有点难以理解。但希望这会有所帮助(提示:看source code确实有帮助。)
默认情况下,YearArchiveView
将在上下文中返回以下内容:
您将在此列表中注意到返回时给定年份的查询集对象为空。
<强> make_object_list 强> 因此,从上面我们知道,默认情况下,上下文将返回与当前年份,当前年份,上一个和下一个对象的日期相关的多个值,但不会返回数据库中的实际查询集对象。
在YearArchiveView中将make_object_list
设置为true将导致给定年份的所有查询集对象通过上下文传回,以便可以在视图中使用它们。
在模板中,查询集对象将在上下文object_list
下可用。
当在给定YearArchiveView的模板中时,您可以使用:
{% for item in object_list %}
<strong>item.title</strong> - {{ item.date }}
{% endfor %}
答案 1 :(得分:1)
除了@MattWritesCode回复之外,我会说有些用例你只对构建导航感兴趣并且不包含大部分实际对象。
我想象处理1000多篇文章,就像大报一样。我很可能希望在支持分页的单独视图中显示实际内容(并且可能是细粒度的许可访问,例如公共帖子和付费墙后面的帖子)。
好问题,我只是在猜测这一点。由于查询集是懒惰的,我不希望它是一个很大的性能提升,但也许在某种程度上也是一个方面。会对此有更多意见感兴趣。