重定向到另一个页面,而不是收到Django standarf 404错误

Maj*_*eek 2 django

我的views.py中有类似的内容

    instance = get_object_or_404(register,pk=request.user.id)
Run Code Online (Sandbox Code Playgroud)

现在,如果没有与此用户相关的对象,我会收到标准的Django 404错误消息,说找不到匹配项。我想要的是代替接收此404错误,将其重定向到另一个页面,例如“ something.html”。但我不知道如何。我正在使用method =“ POST”有什么方法可以将其重定向到其他页面,而不是收到404错误

Ash*_*hok 5

使用try / except块,如果找不到对象,则可以重定向

try:
    instance = register.get(pk=request.user.id)
except register.DoesNotExist:
    return HttpResponseRedirect('url that renders something.html')   
Run Code Online (Sandbox Code Playgroud)

仅供参考,Django get_object_or_404函数的定义如下所示

def get_object_or_404(klass, *args, **kwargs):
    """ 
    Uses get() to return an object, or raises a Http404 exception if the object
    does not exist.

    klass may be a Model, Manager, or QuerySet object. All other passed
    arguments and keyword arguments are used in the get() query.

    Note: Like with get(), an MultipleObjectsReturned will be raised if more than one
    object is found.
    """
    queryset = _get_queryset(klass)
    try:
        return queryset.get(*args, **kwargs)
    except queryset.model.DoesNotExist:
        raise Http404('No %s matches the given query.' % queryset.model._meta.object_name)
Run Code Online (Sandbox Code Playgroud)

文档开始,如果您在视图函数中的任何时候引发Http404,Django都会捕获它并返回应用程序的标准错误页面以及HTTP错误代码404。

如果要基于上下文变量呈现自定义404.html,请查看自定义错误视图