Django 的 YearArchiveView 通用日期视图
Django's YearArchiveView generic date view
在 Django 中有一个名为 YearArchiveView
that has an attribute called make_object_list
的通用视图。
有人可以向我解释为什么这个选项实际上存在吗?
如果我想要一个基于年份的查询集,那么很明显我需要一个对象列表,即使它只有一个对象,这不符合逻辑吗?
还是我理解错了。
TLDR; make_object_list
returns object_list
下视图上下文中给定 YearArchiveView 的所有对象.默认情况下 make_object_list
为 False,这将导致 returned 上下文 object_list
为空。
所以 django documentation is a little tricky to understand on this part. But hopefully this helps (tip: looking at the source code 真的很有帮助)。
YearArchiveView
默认情况下 return 在以下上下文中:
- date_list:一个日期查询集 return 包含其中包含对象的所有月份。
- year:给定年份的日期对象。
- next_year: 下一年第一天的日期对象。
- previous_year: 前一年第一天的日期对象。
您会注意到在此列表中,给定年份的查询集对象 returned 是空的。
make_object_list
因此,从上面我们知道,默认情况下,上下文将 return 一些与对象日期、当前年份、上一个和下一个相关的值,但没有来自数据库的实际查询集对象。
在 YearArchiveView 中将 make_object_list
设置为 true,将导致给定年份的所有查询集对象通过上下文传回,以便在视图中使用它们。
在模板中,查询集对象将在上下文 object_list
下可用。
在给定 YearArchiveView 的模板中,您可以使用:
{% for item in object_list %}
<strong>item.title</strong> - {{ item.date }}
{% endfor %}
除了@MattWritesCode 的回复之外,我想说的是,在某些用例中,您只对构建导航感兴趣,而不包括很多实际对象。
我想象处理 1000 篇文章,就像大报纸那样。我很可能想在一个单独的视图中显示实际内容,该视图支持分页(并且可能是细粒度的权限访问,例如 public posts 和 posts behind a paywall)。
问得好,我只是在猜测这个问题。由于查询集是惰性的,我不希望它能带来很大的性能提升,但也许在某种程度上这也是一个方面。会对更多关于它的意见感兴趣。
在 Django 中有一个名为 YearArchiveView
that has an attribute called make_object_list
的通用视图。
有人可以向我解释为什么这个选项实际上存在吗?
如果我想要一个基于年份的查询集,那么很明显我需要一个对象列表,即使它只有一个对象,这不符合逻辑吗? 还是我理解错了。
TLDR; make_object_list
returns object_list
下视图上下文中给定 YearArchiveView 的所有对象.默认情况下 make_object_list
为 False,这将导致 returned 上下文 object_list
为空。
所以 django documentation is a little tricky to understand on this part. But hopefully this helps (tip: looking at the source code 真的很有帮助)。
YearArchiveView
默认情况下 return 在以下上下文中:
- date_list:一个日期查询集 return 包含其中包含对象的所有月份。
- year:给定年份的日期对象。
- next_year: 下一年第一天的日期对象。
- previous_year: 前一年第一天的日期对象。
您会注意到在此列表中,给定年份的查询集对象 returned 是空的。
make_object_list 因此,从上面我们知道,默认情况下,上下文将 return 一些与对象日期、当前年份、上一个和下一个相关的值,但没有来自数据库的实际查询集对象。
在 YearArchiveView 中将 make_object_list
设置为 true,将导致给定年份的所有查询集对象通过上下文传回,以便在视图中使用它们。
在模板中,查询集对象将在上下文 object_list
下可用。
在给定 YearArchiveView 的模板中,您可以使用:
{% for item in object_list %}
<strong>item.title</strong> - {{ item.date }}
{% endfor %}
除了@MattWritesCode 的回复之外,我想说的是,在某些用例中,您只对构建导航感兴趣,而不包括很多实际对象。
我想象处理 1000 篇文章,就像大报纸那样。我很可能想在一个单独的视图中显示实际内容,该视图支持分页(并且可能是细粒度的权限访问,例如 public posts 和 posts behind a paywall)。
问得好,我只是在猜测这个问题。由于查询集是惰性的,我不希望它能带来很大的性能提升,但也许在某种程度上这也是一个方面。会对更多关于它的意见感兴趣。