【发布时间】:2013-06-03 03:57:13
【问题描述】:
我在一个独立的工具(而不是网络应用程序)中使用 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,只有args 和message,它们提供了无法找到的模板名称。有没有办法找到正在加载的模板标签,或者当行号不再可用时,此错误是否会在稍后阶段发生?
我确实有django.settings 有效,并且TEMPLATE_DEBUG 设置为True,如果这很重要的话。 (我相信这是在将模板渲染到网页时报告行号所必需的,并带有花哨的错误显示。)我还使用了一个简单的模板加载器,通过TEMPLATE_LOADERS 设置,尽管我认为这无关紧要。另外,我目前坚持使用 Django 1.3,因此首选兼容 1.3 的解决方案。
谢谢!
【问题讨论】:
-
不确定我是否可以帮助你,但如果一切都失败了,你可以检查 django-debug-toolbar 源代码以了解它如何处理错误,或者深入了解模板代码本身。每次我不得不深入研究 Django 代码时,我发现它很容易理解。
-
docs.djangoproject.com/en/dev/ref/templates/api/… 这是 django 提供的一种模板支持
标签: python django templates django-templates