4

我在独立工具(而不是网络应用程序)中使用 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一个name等于文件名。这些数字似乎与错误的字符位置不同,但也许还有另一种解释它们的方法?

TemplateDoesNotExist似乎没有source, 只有argsmessage, 提供了找不到的模板的名称。有没有办法找到正在加载的模板标签,或者当行号不再可用时,此错误是否会在稍后阶段发生?

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

谢谢!

4

1 回答 1

1

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

至于TemplateDoesNotExist,它似乎被忽略了,当它作为模板标签的结果出现时,请参阅https://github.com/django/django/blob/1.3.7/django/template/loader.py#L50

于 2013-06-07T08:17:12.310 回答