从python将变量传递到jinja2

时间:2019-11-08 19:45:20

标签: python jinja2

我想在渲染模板时将变量从python传递给jinja2。

'with_remediation'是一个布尔值/变量,我想传入jinja2模板进行评估。

jinja2模板文件的外观如下:


{% if with_remediations %}
no hostname
{% endif %}

hostname {{ nodes.hostname }}

在渲染功能中,我有以下几行代码:

with_remediation = True
baseline = env.get_template(template)
config = baseline.render(nodes = node_object[index],with_remediation)

执行代码时,出现以下错误:

    config = baseline.render(nodes = node_object[index],with_remediation)
SyntaxError: non-keyword arg after keyword arg

但是,如果我直接在函数调用中指定布尔值:

config = baseline.render(nodes = node_object[index],with_remediation=True)

它运行没有错误,但没有预期的输出。

这是执行后的输出:

switch
/templates/cisco/ios/switch/test.jinja2

Push configs? [y/N]: y
config term
Enter configuration commands, one per line.  End with CNTL/Z.
switch(config)#
switch(config)#
switch(config)#
switch(config)#
switch(config)#hostname switch
switch(config)#end
switch#

预期结果应该是:

switch
/templates/cisco/ios/switch/test.jinja2

Push configs? [y/N]: y
config term
Enter configuration commands, one per line.  End with CNTL/Z.
switch(config)#
switch(config)#no hostname
switch(config)#
switch(config)#
switch(config)#hostname switch
switch(config)#end
switch#

为什么它不执行{%if with_remediations%}部分,因为它成立了?

1 个答案:

答案 0 :(得分:0)

{% if with_remediations %}
Works when condition is true //Any Statement
{% else %}
no hostname //Any Statement
{% endif %}

def demo():
boo=True`
  return render_template("demo.html",with_remediations=boo)