我正在使用Django的通用视图来创建一个博客站点。该
我创建的模板entry_archive_day
,entry_archive_month
,
entry_archive
和entry_detail
都完美无缺。
但 entry_archive_year
却没有。相反,它只是一个没有内容的有效页面(不是404或其他错误。看起来它在**object_list**
中看不到任何对象。
我知道archive
使用latest
列表而不是object_list
,
但archive_year
的情况并非如此,对吗?
谢谢!
答案 0 :(得分:5)
解决您的问题:
如果您在调用make_object_list=True
时设置了archive_year
,那么该年份的对象列表将以object_list
的形式提供。
作为一个简单的例子,如果你的网址模式是
url(r'^(?P<year>\d{4})/$', 'archive_year', info_dict, name="entry_archive_year")
其中info_dict
是包含queryset
和date_field
的字典,请将其更改为
url(r'^(?P<year>\d{4}/$', 'archive_year', dict(info_dict,make_object_list=True),
name="entry_archive_year")
<强>解释强>
通用视图archive_year
具有可选参数make_object_list
。默认情况下,它设置为false,object_list
作为空列表传递给模板。
make_object_list
:一个布尔值,指定是否检索今年的完整对象列表并将其传递给模板。如果True
,此对象列表将作为object_list
提供给模板。 (名称object_list
可能不同;请参阅下面“模板上下文”部分中object_list
的文档。)默认情况下,这是False
。
原因是您可能并不总是希望在entry_archive_year
视图中显示整个对象列表。那一年你可能有数百篇博文,太多不能在一页上显示。
相反,archive_year
会将date_list
添加到模板上下文中。这允许您创建指向该年度的月度存档页面的链接,包括具有条目的月份。
date_list
:datetime.date
个对象的列表,表示在给定年份中具有对象的所有月份,根据查询集,按升序排列。
Django docs中有更多信息。
根据以下评论中的要求,提供了如何使用date_list
的示例:
要使用date_list
,您的entry_archive_year
模板将包含以下内容:
<ul>
{% for month in date_list %}
<li><a href="/blog/{{month|date:"Y"}}/{{month|date:"b"}}>
{{month|date:"F"}}</a></li>
{% endfor %}
</ul>
请注意,我已经对网址进行了硬编码 - 实际上最好使用url template tag。有关date_list
在野外使用的示例,请查看Django Weblog 2009 Archive。