古い 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 %}
urls.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 が表示され始めます。
一部の文字を解析できませんでした: year|、month||date:"b"
以下を使用して、テンプレートをレンダリングし、coltrane_entry_archive_month に何が渡されているかを確認できます。
{% for month in date_list %}
{{ year }}
{{ month|date:"b" }}
{% endfor %}
{{ year }} が 'Jan. URL の正規表現に一致する '2013' ではなく 1, 2013'。これはわかりません。
次に、次のレンダリングを試みました。
{% for month in date_list %}
{% url "coltrane_entry_archive_month" "2013","apr" %}
{% endfor %}
今回の TemplateSyntaxError は次のとおりです。
残りを解析できませんでした: '"2013","apr"' からの ',"apr"'
ジェネリック クラス ビューと URL の両方が Django の大きなトピックのように思われるので、ポインタは大歓迎です!