web-dev-qa-db-ja.com

Django-URLテンプレートタグにいくつかの引数を渡す方法

私の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テンプレートタグに複数の引数を渡すにはどうすればよいですか?

21
Phil Gyford

問題は、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フィルターで使用できるオプションを確認してください。

8

同じ問題が発生し(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" %}
13
Vlad T.

月の式は(?P<month>\d{2})ですが、引数1を送信しています。 1\d{2}と一致しないため、URLリゾルバーがビューを検出していません。

月の式を\d{1,2}(またはその効果のあるもの)に変更してみてください。

5
Seth