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' - я получаю ту же ошибку с двумя аргументами. Существует ли другой способ передать несколько аргументов? Я попытался передать в именованных аргументах ключевого слова, и это генерирует подобную ошибку.

Если это имеет значение связанное представление запускается как это:

def issue_section_detail(request, year, month, day, slug):

Как я передаю больше, чем отдельный аргумент к тегу шаблона URL?

21
задан Phil Gyford 22 January 2010 в 18:18
поделиться

2 ответа

Проблема живет в / (? P \ D {2}) / часть вашей конфигурации URL. Это позволяет только ровно две цифры ( \ d {2} ) в то время как escept.pub_date.month - только одна цифра.

Вы можете сделать, либо разрешать также одну цифру в URL-адресе (но это нарушит принцип уникальных URL, / 2010/1 / ... будет таким же, как / 2010 / 01 / ... ) или пропустите две цифры в аргумент месяца в вашем URL TemplateTag.
Вы можете использовать дату фильтр для достижения согласованного формата объектов даты. Используйте тег URL, как это:

{% url paper_issue_section_detail issue.pub_date|date:"Y",issue.pub_date|date:"m",issue.pub_date|date:"d",section_li.slug %}

Посмотрите на аргумент месяца и дневного аргумента: он всегда будет отображаться в виде двух цифр (при необходимости). Посмотрите на документацию TAG TAG , чтобы увидеть, какие варианты возможны для даты фильтра.

8
ответ дан 29 November 2019 в 21:38
поделиться

В вашем месяце выражение (? P <месяц> \ d {2}) , но вы отправляете его аргументу 1 . 1 не совпадает \ d {2} , поэтому Resolver URL не находит ваш вид.

Попробуйте изменение выражения месяца на \ d {1,2} (или что-то к этому эффекту).

5
ответ дан 29 November 2019 в 21:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: