通用视图'archive_year'生成空白页面

时间:2009-08-11 00:30:43

标签: python django view generics

我正在使用Django的通用视图来创建一个博客站点。该 我创建的模板entry_archive_dayentry_archive_monthentry_archiveentry_detail都完美无缺。

entry_archive_year 却没有。相反,它只是一个没有内容的有效页面(不是404或其他错误。看起来它在**object_list**中看不到任何对象。

我知道archive使用latest列表而不是object_list, 但archive_year的情况并非如此,对吗?

谢谢!

1 个答案:

答案 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是包含querysetdate_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_listdatetime.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