通用视图“archive_year”产生空白页
Posted
技术标签:
【中文标题】通用视图“archive_year”产生空白页【英文标题】:Generic view 'archive_year' produces blank page 【发布时间】:2009-08-11 00:30:42 【问题描述】:我正在使用 Django 的通用视图来创建博客站点。这
我创建的模板,entry_archive_day
,entry_archive_month
,
entry_archive
和 entry_detail
都可以完美运行。
但 entry_archive_year
没有。相反,它只是一个没有内容的有效页面(不是 404 或其他错误。看起来它在 **object_list**
中看不到任何对象。
我知道archive
使用latest
列表而不是object_list
,
但archive_year
不是这样,对吗?
谢谢!
【问题讨论】:
【参考方案1】:解决您的问题:
如果您在调用archive_year
时设置了make_object_list=True
,那么该年份的对象列表将以object_list
的形式提供。
举个简单的例子,如果你的 url 模式看起来像
url(r'^(?P<year>\d4)/$', 'archive_year', info_dict, name="entry_archive_year")
其中info_dict
是包含queryset
和date_field
的字典,请将其更改为
url(r'^(?P<year>\d4/$', '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 进行了硬编码 - 实际上使用 url template tag 会更好。有关在野外使用date_list
的示例,请查看Django Weblog 2009 Archive。
【讨论】:
完美!感谢您的及时和明确的回答。我不确定如何从 urls.py 传递设置,但找到了这个例子:github.com/garethr/django-train/blob/… 作为后续,你有一个使用 date_list 的好例子的链接吗? 我添加了一个示例,展示了如何更改 urls.py 以防其他人将来遇到同样的问题,并写了更多关于date_list
的内容。
这是一个绝妙的答案 - 今天早上我遇到了同样的问题,我一直把头撞在墙上,直到我看到这个。它需要更好地记录在 Django 文档中。谢谢阿拉斯代尔。以上是关于通用视图“archive_year”产生空白页的主要内容,如果未能解决你的问题,请参考以下文章
chrome总是空白页,打开网页总是显示无标题,如下图,急,在线等