如何确保模板中的所有关键字都在Jinja渲染方法中传递

时间:2018-04-10 03:34:06

标签: python jinja2

如果我有一个定义了变量的模板,并且在jinja渲染过程中我调用它而不传递关键字,它会使我输出没有任何值。我可以确保在渲染过程中严格传递所有关键字吗?

例如,

mytemplate.j2

<t1>{{ myvar }}<t1>

mystring = temp.render()

返回类似<t1>myvar<t1> or <t1><t1>的字符串如果未传递变量,我如何强制抛出异常

1 个答案:

答案 0 :(得分:0)

要在模板中获取已定义变量的列表,请在此处查看。这是谷歌搜索的第一个。 How to get list of all variables in jinja 2 templates

您可以使用此列表并过滤提供给渲染功能的内容。理想情况下,我发现提供字典最容易。如上面的答案中所示,如果您拥有列表,则应该很容易减少输入。

换个问题。 如果你真的想在未传递myvar的情况下抛出异常,我会在渲染并将字典传递给jinja之前执行此操作。

类似这样的事情

template_vars = {}

if myvar in template_vars:
    template.render(template_vars)
else:
    raise Exception('missing myvar')

或者,您可以在模板中使用if语句,如果myvar不存在,则不会呈现该部分:

{% if myvar %}
    <t1>{{ myvar }}<t1>
{% endif %}

如果提供给jinja渲染方法的字典中缺少myvar,它将呈现为空白。或者输出一条消息,如下所示。

{% if myvar %}
    <t1>{{ myvar }}<t1>
{% else %}
    <t1> myvar was not supplied <t1>
{% endif %}