Django 自定义 500 错误模板不显示 request.user

Posted

技术标签:

【中文标题】Django 自定义 500 错误模板不显示 request.user【英文标题】:Django custom 500 error template not displaying request.user 【发布时间】:2014-11-20 11:59:44 【问题描述】:

我正在实现自定义 404 和 500 模板,但是虽然 404.html 模板似乎返回 request.user.is_authenticated 很好,但 500.html 模板无法返回任何内容。我还检查了 request.user,它在 500 页面上只是空白。

这很奇怪,因为当我触发 500 错误时,我收到了预期的错误报告电子邮件,并且很明显在请求细分中正确定义了 USER。这是我在views.py中使用的代码:

def handler404(request):
    response = render_to_response('404.html', ,
                                  context_instance=RequestContext(request))
    response.status_code = 404
    return response


def handler500(request):
    response = render_to_response('500.html', ,
                                  context_instance=RequestContext(request))
    response.status_code = 500
    return response

我想知道背景中的某些东西(可能在 RequestContext 中)是否将 500 与 404 区别对待?我应该提到我也在使用 django-guardian,尽管我认为这不会影响此案中的任何内容。有什么想法吗?

编辑: This comment 声称“500 模板不会呈现 request.user,因为它报告了 500 服务器错误,因此服务器无法提供任何服务。”有谁知道解决这个问题的方法?似乎应该有一个,因为就像我说的,我在错误报告电子邮件中收到的日志清楚地包含带有用户名的请求对象。

编辑 2: 现在我想知道它是否与 django-allauth 有关——我也在使用它。

【问题讨论】:

尝试在 handler500 函数的上下文变量字典中手动传递 'user': request.user @souldeux 不幸的是,它不起作用。我真正需要做的是正确地传递整个请求对象。我尝试的任何方法似乎都不起作用……就像请求在某个时候被清除了一样。 【参考方案1】:

我想通了!我必须将以下行添加到 urls.py:

handler500 = "mysite.views.handler500"

很奇怪 404 在没有等效线路的情况下如何正常工作,但 500 的行为真的很奇怪。

【讨论】:

以上是关于Django 自定义 500 错误模板不显示 request.user的主要内容,如果未能解决你的问题,请参考以下文章

Django Allauth 自定义登录不显示错误

在自定义模板标签中解析 Django 自定义模板标签

Django - 自定义 403 模板

如何在 Django 的自定义 404 错误模板中显示传递给 Http404 的消息?

在自定义 Django 表单中验证和显示错误

自定义页面 404 未显示,但页面 500 正在显示