我有一个Django应用程序,它使用Django模板系统生成其(非HTML)输出,此外还有Web UI。有一组页面供用户为报表创建模板,为变量替换添加{{}}标签,以及一个额外的模板标签库来很好地设置格式。Django模板引擎与错误检查?
但是,我这样做是目前的方法就是:
t = Template(component_template)
self.output_content = t.render(component_context)
它使用默认的Web输出模板引擎。这有string_if_invalid
设置为None
,如果您更改了管理页面,可能会在手册中出现严重警告。
因此,如果用户在一个变量名的标签要么得到一个错字,它正在悄悄地忽略,使得它到输出。如果他们有一个损坏的标签,它实际上会杀死Web应用程序。我正在寻找一种在编辑时验证模板的方法,以便可以警告用户需要进行更改。
什么我的目标是一样的东西编译器输出:
unknown variable 'ffsdfd' on line 33 of template
template syntax error on line 22 of template
我首先想到的是要建立一个新的模板引擎(),并使用这一个目的,这样我就可以发现一个与众不同的默认string_if_invalid
但并没有告诉我任何关于的缺少/不正确的变量。
engine = Engine(string_if_invalid="!!MISSING_VARIABLE!!", dirs=settings.TEMPLATES[0]['DIRS'],
context_processors=settings.TEMPLATES[0]['OPTIONS']['context_processors'],
app_dirs=settings.TEMPLATES[0]['APP_DIRS'])
t = Template(component_template, engine=engine)
try:
self.output_content = t.render(component_context)
except TemplateSyntaxError:
pass # do something useful here to collect error messages
的TemplateSyntaxError例外的作品,除了我没有得到任何上下文信息等,其中的错误实际上是,当然我只得到了第一次失败。查看django.template代码,看起来像内部看起来有某种扩展异常,它有行号和导致它窒息的标记,但它不会从render()方法中转义。
因此:
如何为用户编辑的模板中的错误提供有用的错误处理?我应该以完全不同的方式做这件事吗?
啊!所以实际上我缺少的部分是:“如果string_if_invalid包含'%s',则格式标记将替换为无效变量的名称。” (https://docs.djangoproject.com/en/1.9/ref/templates/api/#invalid-template-variables) (但是从海峡到异常的转换是好的!) – AnotherHowie