You need to enable JavaScript to run this app. Django配置重复URL前缀后使用url标签跳转报404错误如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Django配置重复URL前缀后使用url标签跳转报404错误如何解决

问题原因

你遇到的404错误由3个核心问题共同导致:

  • 项目级路由重复定义post/前缀,Django优先匹配第一个无include的路由,导致post应用下的所有子路由完全不生效
  • post应用内的详情路由写法不符合Django path规则,且未添加末尾斜杠,和你期望的访问路径不匹配
  • 模板中url标签语法错误,且没有传递必填的id参数

修复步骤

1. 修正项目级urls.py

删除重复的post/普通路由,保留include导入应用路由,修改后代码如下:

urlpatterns = [
    path('admin/', admin.site.urls , name = 'admin'),
    path('',homeView, name='home'),
    path('post/',include('post.urls'), name='posturl'),
    path('student/',include('student.urls') , name='studenturl'),
] 

2. 修正post应用的urls.py

把原来项目级里定义的post视图移到应用路由的根路径,同时修正详情路由的写法,所有路径末尾统一加斜杠匹配Django默认规则:

urlpatterns = [
    path('', post, name='post'),
    path('index/', post_index, name = 'index'),
    path('details/<int:id>/', post_detail, name = 'detail'),
    path('create/', post_create, name = 'create'),
    path('update/', post_update , name = 'update'),
    path('delete/', post_delete , name = 'delete'),
]

注意:如果你的post应用urls.py中设置了app_name = 'post'的命名空间,后续模板调用路由时需要加上命名空间前缀。

3. 修正模板中的url标签写法

  • 去掉{%和%}内部的多余空格,否则Django无法识别模板标签
  • 给detail路由传入必填的id参数
    正确写法如下:
<!-- 没有设置app_name的情况 -->
<a href="{% url 'detail' post.id %}"> =>> {{post.id}}</a>

<!-- 如果设置了app_name='post'的情况 -->
<a href="{% url 'post:detail' post.id %}"> =>> {{post.id}}</a>

修改完成后重启Django开发服务器,即可正常访问:8000/post/details/5格式的地址。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 06:03:04