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

标签 django

我的views.py中有类似的东西

    instance = get_object_or_404(register,pk=request.user.id)

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

最佳答案

使用 try/except block ,如果未找到对象,您可以重定向

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 ,如果您在 View 函数中的任何点引发 Http404,Django 将捕获它并返回应用程序的标准错误页面以及 HTTP 错误代码 404。

customizing error views如果你想根据上下文变量渲染自定义 404.html

关于django - 重定向到另一个页面而不是接收 Django 标准 404 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3190787/

相关文章:

python - 为什么我的查询集在 Django 中评估后会改变大小?

python - 虚假导入错误(模块导入子模块?)

python - 使用URL语法发送参数

python - 重复模式,包含的 django url 中的名称不同

python - Django:如何检查用户是否在过去 7 天内注册?

python 什么时候调用 logging.Handler flush-method?

python - 如何检查用户是否登录(如何正确使用 user.is_authenticated)?

Python/Django 1.5 DatabaseWrapper 线程错误

python - 在 Django CBV 中从纯 HTML 表单访问 POST 数据

python - 在python中设置默认的日期时间格式