Django 5.2.3中不同路径配置导致accounts/login无法映射的原因咨询
Django 5.2.3中不同路径配置导致accounts/login无法映射的原因咨询
我来给你掰扯清楚这里面的门道哈,核心问题出在Django的URL路由路径拼接逻辑上,咱们一步步拆解:
先看你第一种能正常工作的配置
项目根目录的urls.py里用了path('', include('users.urls')):
- 项目级的这个空路径前缀,相当于把
users.urls里的所有路径直接“挂”在网站根路径下 - 你的
users/urls.py里配了path("accounts/", include("django.contrib.auth.urls")),而django.contrib.auth.urls本身自带了login/这个子路径 - 三者拼接起来就是:空前缀 +
accounts/+login/=/accounts/login/,正好和你访问的URL完全匹配,所以能正常显示登录表单
再看第二种失效的配置
当你把项目级路径改成path('users/', include('users.urls'))时:
- 项目级的前缀变成了
users/,这时候users.urls里的所有路径都会自动拼在这个前缀后面 - 拼接后的完整路径就变成了:
users/+accounts/+login/=/users/accounts/login/ - 但你还是访问原来的
/accounts/login/,这个路径和Django现在期望的路径完全不搭,自然就会抛出“路径不匹配”的错误
如果你想让path('users/', include('users.urls'))生效,有两种调整方式:
- 方式一:调整访问的URL,改成访问
http://127.0.0.1:8000/users/accounts/login/ - 方式二:修改
users/urls.py里的路径,把path("accounts/", ...)改成path("", include("django.contrib.auth.urls")),这样拼接后就是users/+ 空 +login/=/users/login/,访问这个URL就能正常显示表单了
内容来源于stack exchange
相关产品推荐
相关产品推荐

