【问题标题】:Django 500 message in custom template自定义模板中的 Django 500 消息
【发布时间】:2011-09-05 14:58:23
【问题描述】:

我有一个 500.html 模板,它会在我的应用程序爆炸时加载,但我想知道是否有任何方法可以在模板中输出异常消息?

如果我这样做:

raise Exception("You broke it!")

当 DEBUG 标志设置为 True 时,这将加载 500.html,但是如何访问模板中的异常消息?比如:

{{ exception.message }}

非常感谢。

G

【问题讨论】:

    标签: django django-templates


    【解决方案1】:

    看看这个答案:

    How do I include a stacktrace in my Django 500.html page?

    将异常传递给您的模板/用户并不好,因为它可能会显示一些您不希望外部可用的内部工作,但如果您确实需要,您可以编写自己的 500 视图,获取异常并将其传递给您的 500 模板

    views.py

    def custom_500(request):
        t = loader.get_template('500.html')
        type, value, tb = sys.exc_info(),
        return HttpResponseServerError(t.render(Context({
        'exception_value': value,
    })))
    

    urls.py

    中的某处
    handler500 = 'mysite.views.my_custom_error_view'
    

    模板

    {{ exception_value }}
    

    在此处了解更多信息:https://docs.djangoproject.com/en/1.6/topics/http/views/#the-500-server-error-view

    【讨论】:

    • 好答案。正如@pastylegs 所提到的,这绝对是不是 一个好主意。您不妨在生产环境中将 DEBUG 设置为 True;它甚至比这种方法更容易。我建议使用 django-sentry,而不是这样做。当发生服务器错误时,您将获得所需的信息,但在它所属的锁定和密钥后面。
    • django-sentry 是一个非常好的主意。它还具有附加功能,您可以将错误令牌传递给您的 500 模板,该模板链接到哨兵后端中的堆栈跟踪/错误。这意味着您的用户可以使用此令牌提交错误报告,并且您可以在不让他们看到任何 gobble-de-gook 的情况下追踪实际错误
    【解决方案2】:

    我知道这是一个老话题,但我只想说清楚:

    如果您想要自定义视图,答案是正确的!默认视图将从项目的主模板目录中加载 500.html(也包括 404.html 和其他)。

    因此,如果您只需要更改静态页面内容,例如在错误页面中插入一些图像,您所要做的就是在此位置创建一个模板文件。

    【讨论】:

      猜你喜欢
      • 2014-11-20
      • 2015-10-30
      • 2014-02-18
      • 2019-04-03
      • 2016-05-09
      • 1970-01-01
      • 1970-01-01
      • 2018-05-30
      • 1970-01-01
      相关资源
      最近更新 更多