调用render()时如何获取Django模板的文件名和行号错误?

时间:2013-06-06 23:42:12

标签: python django templates django-templates

我在独立工具(不在网络应用程序中)中使用Django模板系统,如下所示:

from django import template

try:
    tmpl = loader.get_template(my_template_path)
    context = template.Context(my_template_context)
    txt = tmpl.render(context)
except (template.TemplateSyntaxError, template.TemplateDoesNotExist), e:
    # ...

当模板包含错误时,将引发异常。如何获取错误的文件名,行号和行位置?我是否希望在这种情况下从异常中获取此信息(不为浏览器呈现响应)?

我注意到TemplateSyntaxError有一个source属性,其值是一个包含LoaderOrigin和一对数字的元组。 LoaderOrigin的{​​{1}}等于文件名。这些数字似乎与错误的字符位置不相似,但也许还有另一种方法可以解释它们?

name似乎没有TemplateDoesNotExist,只有sourceargs,它们提供了无法找到的模板的名称。有没有办法找到加载模板标签,或者在线号不再可用的后期阶段发生此错误?

我确实message生效了,django.settings设置为TEMPLATE_DEBUG,如果这很重要的话。 (我相信这需要在将模板渲染到网页时报告行号,并显示奇特的错误。)我也使用了一个简单的模板加载器,通过True设置,但我不认为这应该是重要的。此外,我目前仍然坚持使用Django 1.3,因此首选兼容1.3的解决方案。

谢谢!

1 个答案:

答案 0 :(得分:1)

我相信source的{​​{1}}属性正是​​您所寻找的。 Django代码暗示所提到的数字是发生错误的行号,请参阅https://github.com/django/django/blob/1.3.7/django/views/debug.py#L153

对于TemplateSyntaxError,似乎会被忽略,当它出现在模板标记的结果中时,请参阅https://github.com/django/django/blob/1.3.7/django/template/loader.py#L50