Конфликты маршрутов в Django
Django проверяет маршруты сверху
вниз - в том порядке, в каком
они записаны в urlpatterns.
Как только найден подходящий,
поиск останавливается.
Из-за этого маршруты могут
конфликтовать. В примере ниже
второй маршрут никогда не сработает:
адрес /post/all/ перехватит
первый, приняв 'all' за id:
urlpatterns = [
path('post/<str:id>/', views.post),
path('post/all/', views.posts_all),
]
Чтобы избежать конфликта, более частные адреса пишите выше общих:
urlpatterns = [
path('post/all/', views.posts_all),
path('post/<str:id>/', views.post),
]
Другой способ - сузить параметр
конвертером. Если id только
число, то 'all' ему не подойдет
и конфликта не будет:
urlpatterns = [
path('post/<int:id>/', views.post),
path('post/all/', views.posts_all),
]
Разрулите конфликт маршрутов:
urlpatterns = [
path('user/<str:id>/', views.user),
path('user/all/', views.users_all),
]
Разрулите конфликт маршрутов:
urlpatterns = [
path('page/<int:num>/', views.page),
path('page/about/', views.about),
path('page/', views.pages),
]
Разрулите конфликт маршрутов:
urlpatterns = [
path(
'blog/<str:section>/<int:id>/',
views.blog_item
),
path('blog/all/', views.blog_all),
path(
'blog/all/desc/',
views.blog_all_desc
),
]