Почему django не может распознать два конвертора путей друг от друга?

У меня есть приложение django и у меня есть 2 пути url, которые отличаются только в последней части, которая является конвертером путей:

path('questions/<pk>', views.QuestionDetailView.as_view(), name='question_detail'),
path('questions/<slug:tag_slug>', views.QuestionListView.as_view(), name='questions_by_tag')

Когда я перехожу на 127.0.0.1:8000/questions/1, все нормально и он показывает правильные результаты, но когда я перехожу на 127.0.0.1:8000/questions/something (something - slug), он говорит, что страница не найдена! (Он должен использовать путь seconed url, но он этого не делает!)

Когда я меняю порядок путей, он показывает второй правильно, а с другим проблема! Кто-нибудь может мне помочь?

Вы не указали конвертер путей для <pk>, поэтому будет использоваться конвертер путей <str:…> [Django-doc], и <str:…> является superset из <slug:…>, следовательно, все, что совпадает с <slug:…>, совпадает и с <str:…>, а значит, второй шаблон никогда не сработает.

Вы должны использовать конвертер путей <int:…> для целых чисел, так:

path('questions/<int:pk>/', views.QuestionDetailView.as_view(), name='question_detail'),
path('questions/<slug:tag_slug>/', views.QuestionListView.as_view(), name='questions_by_tag')
Вернуться на верх