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

使用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,提问作者박종준

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:07:32