Django应用URL访问返回404错误,请求排查路由配置问题
Django路由404问题解决
你的404错误源于错误混用了path()和正则表达式语法,Django中path()是精确路径匹配,不支持^这类正则符号,只有re_path()(或url(),是re_path的别名)才支持正则写法。以下是具体修正方案:
1. 修正主项目 demo/urls.py
针对子应用的路由配置,有两种修正方式:
方案一(推荐,用path简洁写法)
from django.contrib import admin from django.urls import path, include from . import views urlpatterns = [ path('admin/', admin.site.urls), path('', views.home, name='home'), path('about/', views.about, name='about'), # 建议统一加结尾斜杠,符合Django规范 path('contact/', views.contact, name='contact'), path('user/', include('user.urls')), # 去掉正则符号^,直接写普通路径 ]
方案二(用re_path支持正则)
from django.contrib import admin from django.urls import path, include, re_path # 导入re_path from . import views urlpatterns = [ path('admin/', admin.site.urls), path('', views.home, name='home'), path('about/', views.about, name='about'), path('contact/', views.contact, name='contact'), re_path(r'^user/', include('user.urls')), # 用re_path替代path来支持正则 ]
2. 修正子应用 user/urls.py
同样去掉正则符号,用path的精确匹配写法:
from django.urls import path from . import views urlpatterns = [ path('login/', views.login, name='login'), # 去掉^/,直接写login/,建议加结尾斜杠 ]
问题根源说明
原来的写法中,path(r'^user/')会把^user/当作普通字符串路径,只有访问http://127.0.0.1:8000/^user/才会匹配;子应用里的path(r'^/login')同理,会匹配/^/login这种不存在的路径,所以访问/user/login时自然返回404。
修正后,访问http://127.0.0.1:8000/user/login/(或根据你是否保留结尾斜杠调整)即可正常匹配路由。
内容的提问来源于stack exchange,提问作者Mohit
相关产品推荐
相关产品推荐

