Django HTTP 500错误

her*_*i0n 8 python django templates http

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

dmg*_*dmg 11

HttpResponseServerError从继承HttpResponse,实际上是非常简单的:

class HttpResponseServerError(HttpResponse):
    status_code = 500
Run Code Online (Sandbox Code Playgroud)

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

def __init__(self, content='', *args, **kwargs):
    super(HttpResponse, self).__init__(*args, **kwargs)
    # Content is a bytestring. See the `content` property methods.
    self.content = content
Run Code Online (Sandbox Code Playgroud)

正如您在默认情况下看到的那样content是空的.

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

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({})))
Run Code Online (Sandbox Code Playgroud)

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