You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django路由冲突:blog详情页URL匹配到games应用视图报错如何解决

Django路由匹配错误解决方案

问题根本原因

Django路由遵循从上到下优先匹配的规则,再加上配置存在两处错误,才导致匹配错乱:

  1. 根路由中path('',include('games.urls'))放在最前面,空前缀会匹配所有根路径下的请求,games应用的子路由<slug:platform>/<slug:slug>是两层slug通配符,会把形如/blog/xxx的请求,识别为platform=blog、slug=xxx,抢先匹配到games的oyun视图
  2. blogs应用的子路由配置错误,path路径不需要加开头的斜杠,path('/<slug:slug>',...)会导致实际匹配路径为blog//xxx,正常访问的/blog/xxx根本无法匹配到blog的详情路由

修复步骤

  • 第一步:修正blogs应用子路由写法,删除路径开头的斜杠,建议末尾加斜杠符合Django默认APPEND_SLASH配置规范:
# blogs/urls.py
path('', views.blogs, name='blog'),
# 删掉开头的/,末尾加/
path('<slug:slug>/', views.blog_id, name='blog_id'),
  • 第二步:修正根路由的配置,两个方案选一个即可:
    • 方案1(推荐,完全避免路由冲突):给games应用也加统一前缀,避免空前缀抢占所有匹配:
    # 根urls.py
    # games路由统一加games前缀
    path('games/',include('games.urls')),
    # blog路径末尾加/
    path('blog/',include('blogs.urls')),
    
    • 方案2(如果必须要games路由直接挂在根路径):调整路由顺序,把更具体的blog路由放在前面:
    # 根urls.py
    # 把更具体的路由放前面
    path('blog/',include('blogs.urls')),
    path('',include('games.urls')),
    
  • 第三步(可选,优化规范):给两个应用配置路由命名空间,避免后续反向解析路由名冲突:
# 根urls.py
path('blog/',include(('blogs.urls', 'blogs'), namespace='blogs')),
path('',include(('games.urls', 'games'), namespace='games')),

后续反向解析路由时用{% url 'blogs:blog_id' slug=xxx %}格式即可。

内容的提问来源于stack exchange,提问作者cvsrt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 15:39:00