Django: URL Path not found переходит в следующее приложение
У меня есть два приложения:
бэкэнд магазин
Я свои урлы в основном дире приложения:
path('backend/', include('backend.urls')),
path('', include('shop.urls')),
проблема в том, что если я пишу в url: localhost:8000/backend/abc, который не существует, Django перепрыгивает на shop.urls и приложение падает, потому что не может найти slug и запрос идет в fail.
Как сделать так, чтобы при переходе по url /backend/somethingwhichnotexist выдавался 404, а не поиск по другим url для этой папки? Я думал, что это одна из основных причин разделения урлов в папках приложений.
Вот некоторые ссылки из файла backend/urls.py:
from django.urls import path, re_path
from . import views as backend_views
from django.contrib.auth import views as auth_views
from froala_editor import views
from django.conf.urls import include
urlpatterns = [
path('stamdata/', backend_views.edit_masterdata),
path('praefikser/', backend_views.edit_prefixes),
path('leverandorer/', backend_views.suppliers_view),
path('leverandorer/add', backend_views.add_supplier),
]
handler404 = 'backend.views.page_not_found_view'
уважает Кристофер.
На данный момент я исправил это с помощью
if category_slug == 'backend':
response = render(
request,
'backend/404.html',
)
response.status_code = 404
return response
else:
пока я не нашел другое решение. Похоже, что диспетчер URL работает следующим образом:
Django просматривает каждый шаблон URL по порядку и останавливается на первом который соответствует запрашиваемому URL, сравнивая с path_info.
Так что пока я не нашел другого способа.
Вы сказали, что Django прогоняет все шаблоны URL и останавливается, пока не найдет подходящий URL. Таким образом, когда вы вводите URL с localhost:8000/backend/abc/, он пробегает по всем URL, прежде чем вернуть 404 клиенту. Таким образом, он останавливается на URL, который поддерживает любую строку с 2 параметрами, в вашем случае ниже URL.
path('<slug:category_slug>/<slug:slug_subcategory>/', butik_views.cat_or_article),
Получение 404 путем добавления статического слова в URL.
path('shop/<slug:category_slug>/<slug:slug_subcategory>/', butik_views.cat_or_article),
или
path('backend/', include('backend.urls')),
path('shop/', include('shop.urls')),