我正在使用Django模板系统处理某些表单电子邮件,最终用户可以编辑模板。
模板的render
方法返回呈现的内容,并以无提示方式传递无效的变量和标记。有没有合理的方法来判断渲染过程中是否有错误?
我正在考虑将settings.TEMPLATE_STRING_IF_INVALID
设置为唯一字符串然后测试此字符串的存在,但这会影响正常的模板呈现,这是不可接受的。我已经扫描了Django的源代码,希望有一个“渲染无效的变量/标签”方法,我可以干净地覆盖以引发异常,但没有这样的运气。
有什么想法吗?
答案 0 :(得分:1)
可悲的是,对这个问题进行黑客攻击是最好的解决方案。应该注意的是,该变量称为TEMPLATE_STRING_IF_INVALID
btw。
或者我建议将Jinja2与Coffin一起使用,这样可以使调试变得更容易,而Jinja2确实为这些错误提供了适当的堆栈跟踪。
答案 1 :(得分:1)
也许您可以在Jinja2中编写模板。它比Django的模板语言更强大,但可以在不存在的变量上抛出异常 - 而且语法非常相似。
它还提供了类似的render
等函数来完成你所要求的功能,而不会影响任何其他Django项目。
例如:
>>> from jinja2 import Environment, StrictUndefined
>>> env = Environment(undefined=StrictUndefined)
>>> template = env.from_string('Say hello to {{name}}')
>>>
>>> template.render()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Python/2.7/site-packages/jinja2/environment.py", line 969, in render
return self.environment.handle_exception(exc_info, True)
File "/Library/Python/2.7/site-packages/jinja2/environment.py", line 742, in handle_exception
reraise(exc_type, exc_value, tb)
File "<template>", line 1, in top-level template code
jinja2.exceptions.UndefinedError: 'name' is undefined
>>>
>>> template.render({'name': 'Ben'})
u'Say hello to Ben'
>>>
>>> template.render(name='Ben')
u'Say hello to Ben'