Django 1.4:在TEMPLATE_DEBUG模式下不包含异常会隐藏异常

时间:2012-04-11 14:08:08

标签: django django-templates

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

  

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

     

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

非常酷..我想。但是现在我怎么能看到提出的异常?

如果我包含模板或调用模板标签,则会引发模板 例外,没有任何事情发生。

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

1 个答案:

答案 0 :(得分:1)

我不太确定我理解你的问题,但我会去回答它。

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

使用Django 1.3及更早版本,Django会报告TemplateSyntaxError

  

/ my-url /

上的TemplateSyntaxError      

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

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

  

/ my-url /

的ValueError      

这是例外值
  请求方法: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 %}