Django按ID请求模型对象返回404错误 按教程编写代码仍无法解决
问题排查与修复方案
你代码的问题集中在路由配置部分:
- 首先是应用内
urls.py的item路由末尾缺少斜杠
你当前写的路由规则是path('item/<int:item_id>', views.item_by_id, name='item_by_id'),仅匹配无末尾斜杠的路径(如/item/1)。而你测试访问的是带末尾斜杠的/item/1/,Django默认开启APPEND_SLASH配置,仅会自动将无斜杠的路径重定向到有斜杠的路径,反过来无法匹配,因此返回404错误。
修复方式:给路由规则加上末尾斜杠,修改为:path('item/<int:item_id>/', views.item_by_id, name='item_by_id'), - 其次是路由前缀匹配问题
你在项目层级urls.py里将myapp的路由挂载在了根路径''下,因此实际可访问的路径是http://localhost:8000/item/1/,和你举例的带/app/前缀的http://localhost:8000/app/item/1/不匹配。
如果你需要保留/app/前缀,将项目层级urls.py的对应行修改为:path('app/', include('myapp.urls')),
额外检查项
完成上述修改后如果还有问题,请确认两点:
- 你已经执行了
python manage.py makemigrations和python manage.py migrate命令,将Item模型成功同步到数据库 - 你已经在Django admin后台创建了至少一个Item对象,否则访问合法路径也会抛出Item不存在的错误
内容的提问来源于stack exchange,提问作者Mampenda
相关产品推荐
相关产品推荐

