私のurls.pyには次のものがあります。
(r'^(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})/section/(?P<slug>[-\w]+)/$',
'paper.views.issue_section_detail',
{},
'paper_issue_section_detail'
),
そして私はこれをテンプレートで行おうとしています:
{% url paper_issue_section_detail issue.pub_date.year,issue.pub_date.month,issue.pub_date.day,section_li.slug %}
しかし、私はこのエラーを受け取ります:
TemplateSyntaxError
Caught an exception while rendering: Reverse for 'paper_issue_section_detail' with arguments '(2010, 1, 22, u'business')' and keyword arguments '{}' not found.
ただし、単一の引数のみを必要とするようにURLパターンを変更すると、正常に機能します。すなわち:
(r'^(?P<year>\d{4})/$',
'paper.views.issue_section_detail',
{},
'paper_issue_section_detail'
),
そして:
{% url paper_issue_section_detail issue.pub_date.year %}
したがって、「url」テンプレートタグを使用して複数の引数を渡すと文句を言うようです-2つの引数で同じエラーが発生します。いくつかの引数を渡す別の方法はありますか?名前付きキーワード引数を渡そうとしましたが、同様のエラーが発生します。
価値があるものについては、関連するビューは次のように始まります。
def issue_section_detail(request, year, month, day, slug):
Urlテンプレートタグに複数の引数を渡すにはどうすればよいですか?
問題は、URL構成の/(?P<month>\d{2})/
部分にあります。正確に2桁(\d{2}
)しか使用できませんが、issue.pub_date.month
は1桁のみです。
URLに1桁も許可するか(ただし、これは一意のURLの原則に違反し、/2010/1/...
は/2010/01/...
と同じになります)、URLテンプレートタグのmonth引数に2桁を渡すことができます。 。date
フィルターを使用して、日付オブジェクトの一貫したフォーマットを実現できます。次のようにurlタグを使用します。
{% url paper_issue_section_detail issue.pub_date|date:"Y",issue.pub_date|date:"m",issue.pub_date|date:"d",section_li.slug %}
月と日の引数を見てください。常に2桁で表示されます(必要に応じて先頭にゼロを付けます)。 nowタグのドキュメント を見て、date
フィルターで使用できるオプションを確認してください。
同じ問題が発生し(Django 1.3.1)を使用していて、GregorMülleggerの提案を試しましたが、2つの理由で機能しませんでした。
したがって、唯一の実用的な解決策は次のとおりです。
{% url news_detail slug=object.slug year=object.date|date:"Y" month=object.date|date:"m" day=object.date|date:"d" %}
月の式は(?P<month>\d{2})
ですが、引数1
を送信しています。 1
が\d{2}
と一致しないため、URLリゾルバーがビューを検出していません。
月の式を\d{1,2}
(またはその効果のあるもの)に変更してみてください。