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

使用SQLite3的Django项目出现404页面未找到问题求助

解决你的Django 404错误问题

首先得点明问题的核心:你的URL路由规则、视图函数参数,以及实际访问的路径三者完全不匹配,这才导致了404错误。

问题具体拆解

  • 你访问的路径是http://127.0.0.1:8000/Habibs%20List,这是一个字符串格式的列表名称
  • 但你的URLconf里只定义了<int:id>规则——这个规则只匹配数字类型的路径,自然无法匹配字符串形式的列表名
  • 另外,你的视图函数index接收的参数是name,但路由里传的是id,就算路径能匹配,参数也对应不上

修复步骤

1. 调整URLconf,匹配字符串名称

把路由规则改成支持字符串参数的<str:name>(Django中<str>会匹配除斜杠外的所有字符,刚好适合你的列表名场景):

from django.urls import path
from . import views

urlpatterns = [
    path("<str:name>", views.index, name="index"),
]

2. 给视图函数加异常处理(可选但推荐)

你的视图逻辑已经能接收name参数,但可以增加异常捕获,避免列表或对应项目不存在时直接崩溃:

def index(response, name):
    try:
        ls = ToDoList.objects.get(name=name)
        item = ls.item_set.get(id=1)
        return HttpResponse("<h1>%s</h1><br></br><p>%s</p>" % (ls.name, str(item.text)))
    except ToDoList.DoesNotExist:
        return HttpResponse("该待办列表不存在!", status=404)
    except ls.item_set.model.DoesNotExist:
        return HttpResponse("这个列表里没有ID为1的项目!", status=404)

3. 重新测试访问

现在你再访问http://127.0.0.1:8000/Habibs%20List,就能正确匹配路由,视图也能根据名称获取对应的ToDoList数据了。

额外优化建议

如果之后想同时支持「按ID访问」和「按名称访问」,可以添加两条路由规则:

urlpatterns = [
    path("<int:id>", views.index_by_id, name="index_by_id"),
    path("<str:name>", views.index_by_name, name="index_by_name"),
]

然后分别编写对应的视图函数处理两种参数类型,这样功能会更灵活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 12:47:32