我有一堆模板( t )我正在渲染一堆案例( c ),因此,一般来说, t×c 模板生成。
for template in templates:
for case in cases:
rendered = template.render(case.data)
save(case.filename, rendered)
现在我们有了一个新的要求,其中某些组合无关紧要,例如其中3种。我不希望在那些极少数情况下呈现文件。 (t×c-3)
我可以编写一些控制流代码(嵌套在for循环中),但是该代码必须比我想要的更紧密地耦合到模板,所以我试图找出一种更好的方法去做。
我想我想要的是在jinja模板中说“对不起,此模板失败了”,然后可以在生成时处理异常。 (同样在for循环中,但在其中的决策较少),我想到了这一点,这种方式很有效,但我不喜欢它:
{{ foo if foo is defined else 1 / 0 }}
这会导致异常,但这不是有用的异常。在Jinja中是否有更干净的方法来生成异常?
作为一种例外,有没有一种方法可以报告在Jinja中不应该生成模板?
(我应该避免这种情况,而是将逻辑放在生成代码中)
答案 0 :(得分:0)
我最终创建了一个看起来像这样的过滤器:
from jinja2 import Undefined
def skip_if_not_defined(value):
if type(value) is Undefined:
raise SkipTemplateException()
所以当我使用它
{{ blah|skip_if_not_defined }}
这会引发一个可以捕获的异常。