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

2024-09-27 21:34:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个独立工具中使用Django模板系统(而不是在web应用程序中),如下所示:

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和一对数字的元组。LoaderOriginname等于文件名。这些数字看起来与错误的字符位置不太相似,但也许还有其他方法可以解释它们?在

TemplateDoesNotExist似乎没有source,只有args和{},它们提供了找不到的模板的名称。有没有一种方法来定位模板标签进行加载,或者这个错误是在以后的阶段当行号不再可用时发生的?在

我确实有django.settings的作用,TEMPLATE_DEBUG被设置为True,如果这很重要的话。(我相信在将模板呈现到网页中时,需要使用这一点来报告行号,并显示奇特的错误。)我还使用了一个简单的模板加载器,通过TEMPLATE_LOADERS设置,但我认为这不重要。另外,我目前还只能使用django1.3,所以最好使用与1.3兼容的解决方案。在

谢谢!在


Tags: django方法模板source文件名my错误context
1条回答
网友
1楼 · 发布于 2024-09-27 21:34:57

我相信TemplateSyntaxErrorsource属性就是您要寻找的。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。在

相关问题 更多 >

    热门问题