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

Django网站访问/cafelist/1出现DoesNotExist错误求助

解决Django中Cafe matching query does not exist的错误

你遇到的DoesNotExist at /cafelist/1 Cafe matching query does not exist错误,核心原因很明确:当你访问/cafelist/1时,Django尝试从数据库中获取主键为1的Cafe对象,但你的数据库里根本没有这条数据。下面是一步步的解决思路和修复方案:

1. 先确认数据库中是否有Cafe数据

首先得搞清楚你的数据库里到底有没有Cafe记录:

  • 用Django Admin查看:启动项目后访问/admin/,登录后找到Cafe模型,看看里面有没有数据。如果是空的,直接在后台添加几条测试数据即可。
  • 用Django Shell验证:在终端运行python manage.py shell,然后依次输入:
    from main.models import Cafe
    # 查看所有Cafe记录
    print(Cafe.objects.all())
    
    如果输出是<QuerySet []>,说明数据库里确实没有任何Cafe数据,这就是报错的直接原因。

2. 给视图添加异常处理,避免粗暴报错

你当前的cafedetails视图用了Cafe.objects.get(pk=pk),这个方法在找不到对象时会直接抛出DoesNotExist异常,导致页面崩溃。更友好的做法是用Django提供的get_object_or_404,它会在找不到对象时返回标准的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()方法
    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='{% url 'cafedetails' list.id %}'">
    <td>{{ list.name }}</td>
    <td>{{ list.content }}</td>
</tr>

或者更符合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>

4. 确保数据库迁移已执行

如果是刚创建Cafe模型,别忘了执行数据库迁移命令,创建对应的数据库表:
在终端依次运行:

python manage.py makemigrations
python manage.py migrate

执行完之后,你才能在Django Admin中添加Cafe数据。


内容的提问来源于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:04:23