如何判断手动渲染Django模板时是否存在渲染错误?

时间:2014-01-03 17:30:39

标签: python django templates

我正在使用Django模板系统处理某些表单电子邮件,最终用户可以编辑模板。

模板的render方法返回呈现的内容,并以无提示方式传递无效的变量和标记。有没有合理的方法来判断渲染过程中是否有错误?

我正在考虑将settings.TEMPLATE_STRING_IF_INVALID设置为唯一字符串然后测试此字符串的存在,但这会影响正常的模板呈现,这是不可接受的。我已经扫描了Django的源代码,希望有一个“渲染无效的变量/标签”方法,我可以干净地覆盖以引发异常,但没有这样的运气。

有什么想法吗?

2 个答案:

答案 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'