1

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

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

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

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

如果我包含模板或调用引发异常的模板标签,则不会发生任何事情。

我很欣赏增加的健壮性..但是没有关于如何显示这些异常的明确文档,调试有点痛苦。

4

1 回答 1

1

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

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

在 Django 1.3 和更早版本中,Django 会报告一个TemplateSyntaxError

/my-url/ 处的 TemplateSyntaxError

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

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

/my-url/ 处的 ValueError

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

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

raise ValueError("This is the exception value")

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

{% url invalid_view_name %}
于 2012-04-11T15:27:06.070 回答