我想在渲染模板时将变量从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%}部分,因为它成立了?
答案 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)