Django 1.1 基于日期的通用视图问题 - archive_year, archive_month, archive_day
我正在做我的第一个Django博客,想通过年、月、日来获取帖子,使用的是Django自带的通用视图,但结果却不太对。(抱歉我这个问题问得不太专业……如果有人知道该问什么合适的问题,请告诉我)
我觉得还是把我的配置给你们看,这样你们能更好地理解我的情况:
完整的博客 URL 配置:
from django.conf.urls.defaults import *
from weblog.models import Entry
entry_info_dict = {
'queryset': Entry.published,
'date_field': 'pub_date',
'template_object_name': 'Entry',
}
urlpatterns = patterns('django.views.generic.date_based',
(r'^$', 'archive_index', entry_info_dict, 'weblog_entry_archive_index'),
(r'^(?P<year>\d{4})/$',
'archive_year', entry_info_dict,
'weblog_entry_archive_year'),
(r'^(?P<year>\d{4})/(?P<month>\w{3})/$',
'archive_month',
entry_info_dict,
'weblog_entry_archive_month'),
(r'^(?P<year>\d{4})/(?P<month>\w{3})/(?P<day>\d{2})/$',
'archive_day',
entry_info_dict,
'weblog_entry_archive_day'),
(r'^(?P<year>\d{4})/(?P<month>\w{3})/(?P<day>\d{2})/(?P<slug>[-\w]+)/$',
'object_detail',
entry_info_dict,
'weblog_entry_detail'),
)
urls.py 文件:
urlpatterns = patterns('',
(r'^blog/', include('weblog.urls.entries')),
...
)
entry_archive_year.html 文件:
<h2>Archive for {{ year }}</h2>
<ul>
{% for month in pub_date %}
<li>
<a href="/blog/{{ year }}/{{ month|date:"b" }}/">{{ month|date:"F" }}</a>
</li>
{% endfor %}
</ul>
假设我有这样一篇博客文章:
example.com/blog/2009/dec/18/test
现在我请求:
example.com/blog/2009/
结果却没有任何内容,虽然输入完整的URL时,文章是能显示出来的。
我觉得Django在某个地方出问题了,虽然它是DEBUG模式,但我找不到具体是哪里出错了。希望能得到一些帮助。
1 个回答
2
月份信息是存储在上下文变量 date_list
中,而不是 pub_date
。
根据 Django 文档中关于 archive_year
的说明:
模板上下文:
除了
extra_context
,模板的上下文还包括:
date_list
:一个包含 datetime.date 对象的列表,这些对象代表在指定年份中,根据查询集可用的所有月份,按顺序排列。
下面的代码应该可以解决这个问题:
{% for month in date_list %}
<li>
<a href="/blog/{{ year }}/{{ month|date:"b" }}/">{{ month|date:"F" }}</a>
</li>
{% endfor %}