Django的YearArchiveView通用日期视图

时间:2015-04-21 09:09:45

标签: python django django-class-based-views

在Django中有一个名为YearArchiveView的通用视图,它有一个名为make_object_list的属性。

有人可以向我解释为什么这个选项实际存在吗?

如果我想要一个基于年份的查询集是不合逻辑的,那么很明显我需要一个对象列表,即使它只有一个对象。 或者我在这里误解了一些东西。

2 个答案:

答案 0 :(得分:1)

TLDR; make_object_listobject_list下的视图上下文中返回给定YearArchiveView的所有对象。默认情况下,make_object_list为False,这将导致返回的上下文object_list为空。

所以django documentation在这方面有点难以理解。但希望这会有所帮助(提示:看source code确实有帮助。)

默认情况下,YearArchiveView将在上下文中返回以下内容:

  • date_list:一个日期查询集,返回包含对象的所有月份。
  • year:给定年份的日期对象。
  • next_year:明年第一天的约会对象。
  • previous_year:上一年第一天的日期对象。

您将在此列表中注意到返回时给定年份的查询集对象为空。

<强> 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多篇文章,就像大报一样。我很可能希望在支持分页的单独视图中显示实际内容(并且可能是细粒度的许可访问,例如公共帖子和付费墙后面的帖子)。

好问题,我只是在猜测这一点。由于查询集是懒惰的,我不希望它是一个很大的性能提升,但也许在某种程度上也是一个方面。会对此有更多意见感兴趣。