Django URL路由配置异常:访问路径需重复前缀才可生效,直接访问触发404错误
Django URL路由配置异常:访问路径需重复前缀才可生效,直接访问触发404错误
兄弟,你的问题根源出在主项目的URL路由配置逻辑混乱,咱们一步步拆解问题,再给你搞定的方案:
问题分析
你在bbsite/urls.py里把home/、about/、lee/等多个顶级路径都重复include了同一个app的urls.py,这会导致app里的所有路由规则被叠加挂载到这些顶级路径下。比如你原本想让localhost/home指向首页,但因为主urls里挂了home/前缀,同时app urls里的路由规则又叠加了一层路径(从Django给出的错误日志能看到home/ home/ [name='home']这个匹配规则),就会变成localhost/home/home才能匹配;直接访问localhost/home时,主前缀匹配后找不到对应的app路由,自然触发404。另外你还漏了导入admin模块,这也会导致admin/路径报错,咱们一起修正。
解决方案
1. 修正主项目的bbsite/urls.py
完全没必要重复include,只需要把app的路由挂载到根路径(或者你想要的统一前缀)就行:
from django.contrib import admin # 补上你漏写的admin导入 from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), # 只保留这一行,把app路由挂载到根路径,所有app的路由都会成为顶级路径 path('', include('bulaboysdotcom.urls')), ]
2. 修正app的bulaboysdotcom/urls.py
现在app路由直接挂在根路径下,咱们把每个页面的路由定义成顶级路径:
from django.urls import path from . import views urlpatterns = [ # 可选:让 localhost/ 和 localhost/home 都能访问首页 path('', views.home, name="index"), # 空路径对应 localhost/ path('home/', views.home, name="home"), # 对应 localhost/home # 其他页面直接定义顶级路径 path('about/', views.about, name="about"), # 对应 localhost/about path('lee/', views.lee, name="lee"), # 对应 localhost/lee path('dede/', views.dede, name="dede"), # 对应 localhost/dede path('contactus/', views.contact_us, name="call-us"), # 对应 localhost/contactus ]
3. 验证效果
重启Django开发服务器,现在访问:
localhost/home→ 正常打开首页localhost/about→ 正常打开关于页- 其他页面也能直接通过顶级路径访问,不会再出现404或者需要重复前缀的情况了
补充说明
如果之后你想给app加统一前缀(比如bulaboys/),只需要把主urls里的path('', include(...))改成path('bulaboys/', include(...)),这时候访问首页就变成localhost/bulaboys/home,灵活调整即可。
备注:内容来源于stack exchange,提问作者ule mangaa
相关产品推荐
相关产品推荐

