Ibo*_*lit 2 python django http-status-code-404
我为Django应用程序编写了自定义404/500页面,这些页面工作正常,除非从我的视图中明确返回状态码为500或404的响应。
在后一种情况下,我会得到响应中返回的任何内容。我知道我可以在这些响应中呈现404和500模板,但是有没有办法自动使用这些404/500页面?
为了说明我的问题:
当请求发送到“ http://my.host/pattern_not_matching_anything ”时,我得到的404.html页面就很好了。
但是,当在http://my.host/valid_pattern/invalid_parameter “ 接收到无效请求时,也就是说,调用了我的视图,我在数据库中查找该参数,但找不到它,因此我返回了适当的回应:
return HttpResponse("not found", status_code=404)
Run Code Online (Sandbox Code Playgroud)
返回的HTML页面仅包含“未找到”,而我希望它呈现我自定义的完整404模板。
而不是使用来返回响应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
...
Run Code Online (Sandbox Code Playgroud)
这是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)
...
Run Code Online (Sandbox Code Playgroud)
状态代码500是服务器出现问题时。您不应故意返回状态码为500的响应。
| 归档时间: |
|
| 查看次数: |
1013 次 |
| 最近记录: |