РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
⊗pydjPmRtCf 23 of 187 menu

Конфликты маршрутов в 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 ), ]
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить