如果我有一个定义了变量的模板,并且在jinja渲染过程中我调用它而不传递关键字,它会使我输出没有任何值。我可以确保在渲染过程中严格传递所有关键字吗?
例如,
mytemplate.j2
<t1>{{ myvar }}<t1>
码
mystring = temp.render()
返回类似<t1>myvar<t1> or <t1><t1>
的字符串如果未传递变量,我如何强制抛出异常
答案 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 %}