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

Django动态URL跳转至404页面问题求助

问题排查与解决方案

我一眼就发现问题出在你的URL模式定义上!

核心问题:URL路径中的多余斜杠

看你定义的detail视图对应的URL模式:

path('<int:question_id/>', views.detail,name='detail'), 

这里的<int:question_id/>末尾多了一个斜杠。Django的int路径转换器只能匹配纯数字字符串,但你浏览器请求的URL是/polls/1/(来自index.html里的硬编码链接),此时polls/后面的部分是1/,包含了斜杠,和int转换器的匹配规则冲突,导致这个URL模式根本无法匹配请求,最终触发404错误。

修复步骤

  1. 修正URL模式
    把detail的URL模式改成不带末尾斜杠的形式:
urlpatterns = [ 
    path('',views.index,name='index'), 
    path('<int:question_id>', views.detail,name='detail'),  # 去掉末尾的斜杠
    path('<int:question_id>/results/',views.results,name='results'), 
    path('<int:question_id>/vote/',views.vote,name='vote') 
]

Django默认启用APPEND_SLASH设置(在settings.py中),当用户访问不带斜杠的URL时会自动重定向到带斜杠的版本,完全不用担心路径格式问题。

  1. 更健壮的优化:使用URL反向解析(推荐)
    你现在在index.html里硬编码了URL:/polls/{{question.id}}/,这种写法灵活性很差——如果以后修改URL前缀或结构,所有硬编码的地方都要同步修改。建议用Django的url模板标签反向生成URL:
<li><a href="{% url 'detail' question.id %}">{{ question.qtext }}</a></li>

这样不管你怎么调整URL模式,只要name='detail'这个标识不变,链接都会自动生成正确地址,彻底避免硬编码带来的潜在错误。

验证修复

修改完URL模式后,重启Django开发服务器,点击index页面里的链接,应该就能正常访问detail页面,成功获取对应的Question对象了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 15:58:14