我的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/