Django URL с параметром не работает с include
Я пытаюсь передать параметр в url перед оператором include. Я думаю, что моя проблема должна быть похожа на эту, но я не могу понять, почему моя не работает. Я получаю ошибку NoReverseMatch at /womens/ Reverse for 'shampoo' with arguments '('womens',)' not found. 1 pattern(s) tried: ['(?P<gender>womens|mens)/items/shampoo/$']
*config.urls*
urlpatterns = [
re_path(r'(?P<gender>womens|mens)/items/$, include('items.urls')),
...
]
*items.urls*
urlpatterns = [
path('shampoo', views.shampoo, name='shampoo'),
path('soap', views.soap, name='soap'),
...
]
{% url 'items:shampoo' gender='male' %}
я ожидаю получить male/items/shampoo
, но это не работает. Несмотря на это, я все еще могу вручную перейти к male/items/shampoo
.
Это может работать, когда вы делаете это вручную, как male/items/shampoo
, но поскольку это дает ошибку NoReverseMatch, Django не может найти подходящий шаблон URL, который вы предоставили и который включает параметры.
После некоторого изучения этого вопроса выяснилось, что при использовании {% url 'items:shampoo' gender='male' %}
может происходить нечто подобное.
Предполагая, что вы запускаете это на локальном хосте, вы ожидаете, что URL будет выглядеть как male/items/shampoo
.
Этот url говорит, посмотрите в мужском разделе, среди товаров покажите шампунь.
Но вы передаете параметр не в том месте. {% url 'items:shampoo' gender='male' %}
означает, что параметр male
передается в URL, который имеет пространство имен shampoo
. URL с пространством имен shampoo
не принимает никаких параметров.
Можно попробовать изменить ваш код следующим образом.
*config.urls*
urlpatterns = [
re_path(r'^$', include('items.urls')),
...
]
from django.conf.urls import url, path
*items.urls*
urlpatterns = [
url(r'^(?P<gender>\w+)/items/shampoo/$', views.shampoo, name='shampoo'),
path('soap', views.soap, name='soap'),
...
]