您的位置:

报错Http404(_("Content type %(ct_id)s object %(obj_id)s doesn’t exist")% {"ct_id": content_type_id, "obj_id": object_id})的解决

  发布时间:2023-03-12 08:56:39
例如如何解决如果你在视图函数中使用的是 try-except 语句来捕获 Http异常,那么你可以在 except 块中返回一个给定的错误页面或其他响应。例如如果你在视图函数中使用的是 get_object_or_404,那么你可以在 URL 模式中使用正则表达式来限制 URL 参数的取值范围。如果 object_id 不是整数,那么就会出现 Http错误。使用例子当然,下面是一个使用 try-except 语句捕获 Http异常的例子下面是一个使用 get_object_or_的例子希望这些例子能帮到你。

报错的原因

这通常是因为你在 Django 的某个视图函数中尝试访问一个不存在的对象。

比如,如果你的视图函数按照一个对象的 ID 来获取该对象,然后进行某些操作,那么如果该 ID 对应的对象在数据库中不存在,那么就会出现这个错误。

通常的解决方案是检查你的代码,确保你在视图函数中访问的对象存在。

例如,你可以在视图函数中使用 try-except 语句来捕获 Http404 异常,并返回一个给定的错误页面或其他响应。

例如:


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

def view_function(request, object_id):
    try:
        object = MyModel.objects.get(id=object_id)
    except MyModel.DoesNotExist:
        raise Http404(_("Content type %(ct_id)s object %(obj_id)s doesn’t exist")% {"ct_id": content_type_id, "obj_id": object_id})
    return render(request, 'template.html', {'object': object})

如何解决

如果你在视图函数中使用的是 try-except 语句来捕获 Http404 异常,那么你可以在 except 块中返回一个给定的错误页面或其他响应。

例如:


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

def view_function(request, object_id):
    try:
        object = MyModel.objects.get(id=object_id)
    except MyModel.DoesNotExist:
        return render(request, 'error.html', {'message': 'Object does not exist'})
    return render(request, 'template.html', {'object': object})

如果你在视图函数中使用的是 get_object_or_404,那么你可以在 URL 模式中使用正则表达式来限制 URL 参数的取值范围。

例如,你可以在 URL 模式中使用如下正则表达式:


path('view//', view_function, name='view')

这样,只有当 object_id 是整数时,URL 才能匹配成功。如果 object_id 不是整数,那么就会出现 Http404 错误。

希望这些信息能帮到你。如果你有其他问题,欢迎继续提问。

使用例子

当然,下面是一个使用 try-except 语句捕获 Http404 异常的例子:


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

def view_function(request, object_id):
    try:
        object = MyModel.objects.get(id=object_id)
    except MyModel.DoesNotExist:
        return render(request, 'error.html', {'message': 'Object does not exist'})
    return render(request, 'template.html', {'object': object})

下面是一个使用 get_object_or_404 的例子:


from django.shortcuts import render, get_object_or_404
from .models import MyModel

def view_function(request, object_id):
    object = get_object_or_404(MyModel, id=object_id)
    return render(request, 'template.html', {'object': object})

希望这些例子能帮到你。如果你还有其他问题,欢迎继续提问。