Как передать необязательный аргумент в 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 во втором.