Django:URL 找不到路径跳转到下一个应用程序

Django: URL Path not found jumps into next app

我有两个应用程序:

后端 店铺

我的 urls 在主应用程序目录中:

path('backend/', include('backend.urls')),
path('', include('shop.urls')),

问题是如果我在我的 url 中写入: localhost:8000/backend/abc 不存在 Django 跳转到 shop.urls 并且应用程序崩溃,因为它可以找不到 slug,查询失败。

如果我转到 url /backend/somethingwhichnotexist 返回 404 而不是在其他应用 url 中搜索此文件夹,我该如何防止?我认为这是在应用程序文件夹中拆分 url 的主要原因之一。

这里有一些 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'

shop/urls.py

此处 url 停止:

path('<slug:category_slug>/<slug:slug_subcategory>/', butik_views.cat_or_article),

通常我不希望后端 urls 切换到前端视图

问候 克里斯托弗.

现在我用

修复了它

shop/views.py

if category_slug == 'backend':
    response = render(
        request,
        'backend/404.html',
    )
    response.status_code = 404
    return response
else:

直到我找到另一个解决方案。看起来 URL 调度程序是这样工作的:

Django runs through each URL pattern, in order, and stops at the first one that matches the requested URL, matching against path_info.

所以目前我还没有找到其他方法。

编辑:

我在 backend/urls.py:

的末尾添加了这个
re_path(r'^.*/$', backend_views.page_not_found_view)

所以在所有工作 url 之后它会转到所有其他 404 视图。

你说 Django 运行 遍历所有 URL 模式并停止,直到找到匹配的 URL。所以,这里发生的事情是,当你用 localhost:8000/backend/abc/ 键入 URL 时,它 运行 在返回 404 之前通过所有 URLS客户端。因此,它在 URL 处停止,在 URL.

以下的情​​况下,它支持带有 2 个参数的任何字符串
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')),