通用视图“archive_year”产生空白页

Posted

技术标签:

【中文标题】通用视图“archive_year”产生空白页【英文标题】:Generic view 'archive_year' produces blank page 【发布时间】:2009-08-11 00:30:42 【问题描述】:

我正在使用 Django 的通用视图来创建博客站点。这 我创建的模板,entry_archive_dayentry_archive_monthentry_archiveentry_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 是包含querysetdate_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_yeardate_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 进行了硬编码 - 实际上使用 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”产生空白页的主要内容,如果未能解决你的问题,请参考以下文章

离子导航视图结果为空白页

Laravel View Make 返回空白页

当视图以另一种方法返回时,Laravel 返回空白页

chrome总是空白页,打开网页总是显示无标题,如下图,急,在线等

Google Adsense 响应式广告单元有时会在移动视图中产生空白

word中怎样删除一页的两种方法(2)