我为我的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收到无效请求时,也就是说,我的视图被调用,我在DB中查找参数但找不到它,因此我返回相应的响应:
return HttpResponse("not found", status_code=404)
返回的HTML页面仅包含“未找到”,而我希望它能够呈现我自定义的完整404模板。
答案 0 :(得分:4)
您应该提出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表示服务器出现问题。您不应故意返回状态代码为500的回复。