首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django HTTP 500错误

Django HTTP 500错误
EN

Stack Overflow用户
提问于 2013-02-06 22:55:39
回答 4查看 19.4K关注 0票数 9

我正在创建一个自定义的HTTP 500错误模板。为什么Django会在我引发异常时显示它,而不是在我返回HttpResponseServerError时显示(我只是得到了默认的browser 500错误)?我觉得这种行为很奇怪。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-02-06 23:15:54

HttpResponseServerError继承自HttpResponse,实际上非常简单:

代码语言:javascript
复制
class HttpResponseServerError(HttpResponse):
    status_code = 500

那么让我们来看一下HttpResponse构造函数:

代码语言:javascript
复制
def __init__(self, content='', *args, **kwargs):
    super(HttpResponse, self).__init__(*args, **kwargs)
    # Content is a bytestring. See the `content` property methods.
    self.content = content

如您所见,默认情况下content为空。

现在,让我们看看Django本身是如何调用它的(摘自django.views.defaults):

代码语言:javascript
复制
def server_error(request, template_name='500.html'):
    """
    500 error handler.

    Templates: :template:`500.html`
    Context: None
    """
    try:
        template = loader.get_template(template_name)
    except TemplateDoesNotExist:
        return http.HttpResponseServerError('<h1>Server Error (500)</h1>')
    return http.HttpResponseServerError(template.render(Context({})))

正如您所看到的,当您生成服务器错误时,将使用名为500.html的模板,但是当您只返回HttpResponseServerError时,内容是空的,浏览器将返回到其默认页面。

票数 11
EN

Stack Overflow用户

发布于 2013-02-06 23:23:28

将此内容放在urls.py中。

代码语言:javascript
复制
#handle the errors    
from django.utils.functional import curry
from django.views.defaults import *

handler500 = curry(server_error, template_name='500.html')

将500.html放入模板中。就是这么简单。

票数 2
EN

Stack Overflow用户

发布于 2013-02-06 23:01:54

你有没有尝试过其他浏览器?您的自定义错误页是否大于512字节?当服务器的答案小于512字节时,一些浏览器(包括Chrome)似乎会用自己的页面替换错误页面。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14731988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档