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

Mat*_*ris 3 python generics django view

我正在使用Django的通用视图来创建一个博客站点.模板我创建,entry_archive_day,entry_archive_month, entry_archive,和entry_detail所有完美地工作.

entry_archive_year事实并非如此.相反,它只是一个没有内容的有效页面(不是404或其他错误.看起来它看起来没有任何对象**object_list**.

我知道archive使用latest列表代替object_list,但事实并非如此archive_year,对吗?

谢谢!

Ala*_*air 5

要解决您的问题:

如果make_object_list=True在调用时设置archive_year,则该年份的对象列表将可用object_list.

作为一个简单的例子,如果你的网址模式是这样的

url(r'^(?P<year>\d{4})/$', 'archive_year', info_dict, name="entry_archive_year")
Run Code Online (Sandbox Code Playgroud)

where info_dict是包含queryset和的字典date_field,并将其更改为

url(r'^(?P<year>\d{4}/$', 'archive_year', dict(info_dict,make_object_list=True),
        name="entry_archive_year")
Run Code Online (Sandbox Code Playgroud)

说明:

通用视图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文档中有更多信息.

根据以下评论中的要求,如何使用的示例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>
Run Code Online (Sandbox Code Playgroud)

请注意,我已经对网址进行了硬编码 - 在实践中,最好使用网址模板标记.有关date_list在野外使用的示例,请查看Django Weblog 2009 Archive.