如果未定义字段,如何跳过呈现文件?

时间:2018-10-31 21:58:49

标签: python jinja2

我有一堆模板( 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中不应该生成模板?

(我应该避免这种情况,而是将逻辑放在生成代码中)

1 个答案:

答案 0 :(得分:0)

我最终创建了一个看起来像这样的过滤器:

from jinja2 import Undefined

def skip_if_not_defined(value):
    if type(value) is Undefined:
        raise SkipTemplateException()

所以当我使用它

{{ blah|skip_if_not_defined }}

这会引发一个可以捕获的异常。