使用Django开发网站访问/cafelist/1出现DoesNotExist错误求助
解决Django中Cafe匹配查询不存在的问题
嘿,我来帮你搞定这个DoesNotExist错误!你访问/cafelist/1时出现的问题,核心原因是你的数据库里没有主键为1的Cafe记录,不过咱们还得顺便排查其他潜在小问题,一步步来:
1. 先解决核心:数据库没有对应数据
Cafe.objects.get(pk=pk)这个方法在找不到匹配的对象时,就会抛出DoesNotExist异常。咱们先确认数据库里有没有Cafe数据:
方法一:通过Django Shell添加测试数据
打开终端,进入项目根目录,依次运行以下命令:
python manage.py shell
进入Shell后输入:
from main.models import Cafe # 查看现有数据 Cafe.objects.all() # 如果是空的,创建一条测试数据 Cafe.objects.create(name="济州岛咖啡馆", content="这是一家很棒的海边咖啡馆!")
创建完成后,再访问/cafelist/1应该就能看到内容了。
方法二:通过后台管理页面添加数据
如果觉得Shell麻烦,可以用Django的admin后台:
- 在
main应用目录下创建admin.py文件,写入以下内容:
from django.contrib import admin from .models import Cafe admin.site.register(Cafe)
- 运行
python manage.py createsuperuser创建管理员账号 - 访问
/admin登录,就能在后台添加、编辑Cafe数据了。
2. 优化视图,避免用户乱输ID导致崩溃
即使以后有用户输入不存在的ID(比如/cafelist/999),咱们也不该让服务器直接报错,应该返回友好的404页面。修改views.py的cafedetails函数:
from django.shortcuts import render, get_object_or_404 # 新增get_object_or_404导入 from .models import Cafe def cafedetails(request, pk): # 用get_object_or_404替换原来的get,找不到就返回404 cafeobj = get_object_or_404(Cafe, pk=pk) return render(request, 'main/cafedetails.html', {'cafeobj': cafeobj})
3. 修复前端列表的跳转问题
看你cafelist.html里的<tr onclick="{% url 'cafedetails' list.id %}">,这行代码其实不会触发页面跳转,因为onclick需要的是JavaScript代码。咱们改成这样:
<tr onclick="window.location.href='{% url 'cafedetails' list.id %}'">
或者更符合HTML规范的写法,把单元格内容包成<a>标签:
<tr> <td><a href="{% url 'cafedetails' list.id %}">{{ list.name }}</a></td> <td><a href="{% url 'cafedetails' list.id %}">{{ list.content }}</a></td> </tr>
按照上面的步骤操作后,你的页面应该就能正常访问啦!
内容的提问来源于stack exchange,提问作者박종준
相关产品推荐
相关产品推荐

