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')),
我有两个应用程序:
后端 店铺
我的 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')),