我正在尝试更新旧的 Django 项目(最后在 Django 1.4 工作)以使用基于类的通用视图(在 Django 1.5 中)
以下曾经工作
模板:
{% block content %}
{% for month in date_list %}
<h2><a href="{% url coltrane_entry_archive_month year,month|date:"b" %}">{{ month|date:"F" }}</a></h2>
<h2>Blah</h2>
{% endfor %}
{% endblock %}
网址.py
urlpatterns = patterns('django.views.generic.date_based',
...
(r'^(?P<year>\d{4})/$', 'archive_year', dict(entry_info_dict,make_object_list=True), 'coltrane_entry_archive_year'),
(r'^(?P<year>\d{4})/(?P<month>\w{3})/$', 'archive_month', entry_info_dict, 'coltrane_entry_archive_month'),
...
)
但是,当我更新 urls.py 以使用泛型类时
class ArticleYearArchiveView(YearArchiveView):
queryset = Entry.objects.all()
date_field = "pub_date"
make_object_list = True
allow_future = True
urlpatterns = patterns('',
...
url(
r'^(?P<year>\d{4})/$',
ArticleYearArchiveView.as_view(),
name='coltrane_entry_archive_year'
),
url(
r'^(?P<year>\d{4})/(?P<month>\w{3})/$',
dates.MonthArchiveView.as_view(
template_name='coltrane/entry_archive_month.html',
queryset=Entry.objects.filter(status=Entry.LIVE_STATUS),
date_field='pub_date'),
name="coltrane_entry_archive_month"
),
...
)
以下 TemplateSyntaxError 开始出现:
无法解析某些字符:年|、月||日期:“b”
我可以使用以下方法渲染模板并检查传递给 coltrane_entry_archive_month 的内容:
{% for month in date_list %}
{{ year }}
{{ month|date:"b" }}
{% endfor %}
我确实注意到 {{ year }} 被渲染为 'Jan. 1, 2013' 而不是 '2013' 匹配 url 中的正则表达式。这个我不明白。
然后我尝试渲染以下内容:
{% for month in date_list %}
{% url "coltrane_entry_archive_month" "2013","apr" %}
{% endfor %}
不高兴,这次 TemplateSyntaxError 是:
无法解析余数:来自 '"2013","apr"' 的 ',"apr"'
通用类视图和 url 在 Django 中似乎都是较大的主题,所以任何指针都会非常受欢迎!