重定向到另一个页面而不是接收Django标准404错误

时间:2010-07-06 22:51:20

标签: django

我的views.py

中有类似的内容
    instance = get_object_or_404(register,pk=request.user.id)

现在,如果没有针对该用户的相关对象,我会收到标准django 404 eror 说找不到匹配。 我想要的不是接收这个404错误而是将其重定向到另一个页面说“something.html”。但我不知道怎么做。我正在使用method =“POST” 有没有办法将其重定向到其他页面,而不是收到404错误

2 个答案:

答案 0 :(得分:4)

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

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

仅供参考,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)
来自docs

,如果你在视图函数的任何一点提升Http404,Django将捕获它并返回你的应用程序的标准错误页面,以及HTTP错误代码404.

如果要根据上下文变量呈现自定义404.html,请查看customizing error views

答案 1 :(得分:0)

根据Big Picture的不同,您可能需要查看django.contrib.flatpages并查看它们正在做什么。基本上他们正在处理中间件中的404,然后查看路径以确定是否有可以返回的内容。我在几个网站上使用过这方面的变体。