您的位置:

为什么Http404("Feed object does not exist."),怎么解决

  发布时间:2023-03-30 22:07:20
但是,最常见的做法之一是在视图函数中使用 try-except 捕获可能出现的 Http异常。您可以捕获该异常并返回一个 Http响应你的其他代码或者使用快捷函数,简化这种操作你的其他代码这样,当用户请求的对象不存在时,将返回一个 响应,而不是抛出 Http异常。使用例子以下是一个使用函数的示例视图这个视图将接受一个名为 my_id 的参数,并使用该参数查询 MyModel 模型中的对象。当然,也可以通过使用 try-except 来实现,如下这些方法都可以解决没有对应数据的错误。

报错的原因

这可能是因为在您的Django代码中访问了不存在的对象。您可能在视图函数中使用了一个不存在的数据库 ID 来查询数据库,或者在视图函数中使用了一个变量(例如从URL中提取的变量)来确定要访问的对象,但是该变量的值不正确。

需要检查一下对应的数据存不存在,如果没有就跳过404页面。

如何解决

解决这个问题的方法可能有很多种,具体取决于您的代码结构。

但是,最常见的做法之一是在视图函数中使用 try-except 捕获可能出现的 Http404 异常。您可以在视图函数中使用 get() 方法来查询数据库,如果对象不存在,get() 方法会抛出一个 DoesNotExist 异常。您可以捕获该异常并返回一个 Http404 响应。


from django.shortcuts import get_object_or_404, render
from django.http import Http404

def my_view(request, my_id):
    try:
        my_object = MyModel.objects.get(id=my_id)
    except MyModel.DoesNotExist:
        raise Http404("my object does not exist.")
    # 你的其他代码

或者使用 get_object_or_404() 快捷函数,简化这种操作


from django.shortcuts import get_object_or_404

def my_view(request, my_id):
    my_object = get_object_or_404(MyModel, id=my_id)
    # 你的其他代码

这样,当用户请求的对象不存在时,将返回一个 404 响应,而不是抛出 Http404 异常。

使用例子

以下是一个使用 get_object_or_404() 函数的示例视图:


from django.shortcuts import get_object_or_404
from .models import MyModel

def my_view(request, my_id):
    my_object = get_object_or_404(MyModel, id=my_id)
    return render(request, 'my_template.html', {'my_object': my_object})

这个视图将接受一个名为 my_id 的参数,并使用该参数查询 MyModel 模型中的对象。如果查询的对象不存在, get_object_or_404() 函数将返回一个 HTTP 404 Not Found 响应,而不是抛出一个异常。如果查询的对象存在,则将其传递给渲染器并返回给用户。

当然,也可以通过使用 try-except 来实现,如下:


from django.shortcuts import render
from django.http import Http404
from .models import MyModel

def my_view(request, my_id):
    try:
        my_object = MyModel.objects.get(id=my_id)
    except MyModel.DoesNotExist:
        raise Http404("my object does not exist.")
    return render(request, 'my_template.html', {'my_object': my_object})

这些方法都可以解决没有对应数据的404错误。