Django,当我 return status_code 404 或 500 时自定义 404/500
Django, custom 404/500 for when i return status_code 404 or 500
我为我的 Django 应用程序编写了自定义 404/500 页面,它们工作正常,除非我明确地 return 从我的视图中使用状态代码 500 或 404 进行响应。
在后一种情况下,我会在响应中得到 return 的任何内容。我知道我可以在这些响应中呈现我的 404 和 500 模板,但是有没有办法自动使用这些 404/500 页面?
为了说明我的问题:
当请求发送到“http://my.host/pattern_not_matching_anything”时,我的 404.html 页面正常。
但是,当在 http://my.host/valid_pattern/invalid_parameter" 收到无效请求时,也就是说,我的视图被调用,我在数据库中查找参数但没有找到,因此我 return 适当的回应:
return HttpResponse("not found", status_code=404)
HTML 页面 returned 仅包含 "not found",而我希望它呈现我自定义的完整 404 模板。
而不是 return 使用 status_code=404
进行响应,您应该引发 Http404
异常:
from django.http import
def my_view(request, slug):
try:
obj = MyModel.object.get(slug=slug)
except MyModel.DoesNotExist:
raise Http404
...
这是 Django 中的常见模式,因此您可以改用 get_object_or_404
快捷方式。
from django.shortcuts import get_object_or_404
def my_view(request, slug):
obj = get_object_or_404(MyModel, slug=slug)
...
状态代码 500 表示您的服务器出现问题。您不应该故意 return 状态代码为 500 的响应。
我为我的 Django 应用程序编写了自定义 404/500 页面,它们工作正常,除非我明确地 return 从我的视图中使用状态代码 500 或 404 进行响应。
在后一种情况下,我会在响应中得到 return 的任何内容。我知道我可以在这些响应中呈现我的 404 和 500 模板,但是有没有办法自动使用这些 404/500 页面?
为了说明我的问题:
当请求发送到“http://my.host/pattern_not_matching_anything”时,我的 404.html 页面正常。
但是,当在 http://my.host/valid_pattern/invalid_parameter" 收到无效请求时,也就是说,我的视图被调用,我在数据库中查找参数但没有找到,因此我 return 适当的回应:
return HttpResponse("not found", status_code=404)
HTML 页面 returned 仅包含 "not found",而我希望它呈现我自定义的完整 404 模板。
而不是 return 使用 status_code=404
进行响应,您应该引发 Http404
异常:
from django.http import
def my_view(request, slug):
try:
obj = MyModel.object.get(slug=slug)
except MyModel.DoesNotExist:
raise Http404
...
这是 Django 中的常见模式,因此您可以改用 get_object_or_404
快捷方式。
from django.shortcuts import get_object_or_404
def my_view(request, slug):
obj = get_object_or_404(MyModel, slug=slug)
...
状态代码 500 表示您的服务器出现问题。您不应该故意 return 状态代码为 500 的响应。