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')),

Вернуться на верх