我的views.py
中有类似的内容 instance = get_object_or_404(register,pk=request.user.id)
现在,如果没有针对该用户的相关对象,我会收到标准django 404 eror 说找不到匹配。 我想要的不是接收这个404错误而是将其重定向到另一个页面说“something.html”。但我不知道怎么做。我正在使用method =“POST” 有没有办法将其重定向到其他页面,而不是收到404错误
答案 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,然后查看路径以确定是否有可以返回的内容。我在几个网站上使用过这方面的变体。