В моем 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?
Проблема живет в / (? P
часть вашей конфигурации 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 , чтобы увидеть, какие варианты возможны для даты
фильтра.
В вашем месяце выражение (? P <месяц> \ d {2})
, но вы отправляете его аргументу 1
. 1
не совпадает \ d {2}
, поэтому Resolver URL не находит ваш вид.
Попробуйте изменение выражения месяца на \ d {1,2}
(или что-то к этому эффекту).