【问题标题】:Django 1.4: No wrapping of exceptions in TEMPLATE_DEBUG mode hides exceptionsDjango 1.4:在 TEMPLATE_DEBUG 模式下不包装异常隐藏异常
【发布时间】:2012-04-11 14:08:07
【问题描述】:

我已经在 django-users 邮件列表上询问过,但没有得到任何答案..所以我想我会在这里尝试。

在以前的 Django 版本中,只要 TEMPLATE_DEBUG 设置为 True,在模板渲染期间引发的任何异常(甚至与模板语法无关的异常)都会被包裹在 TemplateSyntaxError 中并重新引发。这样做是为了在调试 500 页面中提供详细的模板源位置信息。

在 Django 1.4 中,不再包装异常。相反,原始异常使用源信息进行注释。这意味着无论 TEMPLATE_DEBUG 的值如何,从模板渲染中捕获异常现在都是一致的,并且无需捕获和解包 TemplateSyntaxError 来捕获其他错误。

很酷..我猜。但是现在我如何才能看到引发的异常?

如果我包含一个模板或调用一个模板标签,它会引发一个 异常,什么都没有发生。

我很欣赏增加的稳健性..但没有明确的文档 怎么显示那些异常,调试有点痛苦。

【问题讨论】:

    标签: django django-templates


    【解决方案1】:

    我不太确定我是否理解你的问题,但我会尽力回答。

    DEBUGTEMPLATE_DEBUGTrue,并且在渲染过程中引发异常时,您会看到(这个Django 开发人员非常熟悉的)黄色错误页面。

    对于 Django 1.3 及更早版本,Django 会报告 TemplateSyntaxError

    /my-url/ 处的模板语法错误

    渲染时捕获 ValueError:这是异常值
    请求方法:GET
    请求网址:http://127.0.0.1:8000/my-url/
    Django 版本:1.3.1
    异常类型:TemplateSyntaxError
    异常值:渲染时捕获ValueError:这是异常值

    从 Django 1.4 开始,您会看到原来的异常:

    /my-url/ 处的值错误

    这是异常值
    请求方法:GET
    请求网址:http://127.0.0.1:8000/my-url/
    Django 版本:1.4
    异常类型:ValueError
    异常值:这是异常值

    要自行测试,请尝试在您包含在模板中的任何模板标记中引发异常:

    raise ValueError("This is the exception value")
    

    或者更简单的查看差异的方法是使用带有无效视图名称的 url 标签。

    {% url invalid_view_name %}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多