Как передать необязательный аргумент в URL в Django

У меня есть шаблон URL с одним необязательным параметром:

# urls.py :
url(r'^(page/(?P<page>\w+))?$', MyIndexView.as_view(), name='index'),

Нумерация страниц и все остальное работает хорошо, пока я не создам URL для конкретной страницы в моем шаблоне:

# templates/mysite.html
{% url 'index' 54 %}

Тогда я получаю ошибку:

Reverse for 'index' with arguments '(54,)' and keyword arguments '{}' not found. 1 pattern(s) tried: [u'(page/(?P<page>\\w+))?$']

Без параметра это работает:

{% url 'index' %}

Я также попробовал:

{% url 'index' page=54 %}

и получил аналогичную ошибку.

1 ответ

Решение

Вы можете создать два шаблона URL, один с параметром по умолчанию 1 и другой с page соответствие в URL:

# urls.py :
url(r'^page$', MyIndexView.as_view(), {'page': 1}, name='index'),
url(r'^page/(?P<page>\w+)$', MyIndexView.as_view(), name='index'),

Третий аргумент url функция kwargsотсюда kwargs['page'] будет 1 в первом случае и определяется URL во втором.

Другие вопросы по тегам