使用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
相关产品推荐
相关产品推荐

