我写了一个Python文件,以使从JSON数据的神社模板现在如何写嵌套for和ifs的python代码的jinja模板?
import jinja2
from json import dumps
temploader = jinja2.FileSystemLoader(searchpath = '/')
tempenv = jinja2.Environment(loader=temploader,extensions=['jinja2.ext.loopcontrols'])
tempenv.filters['dumps'] = dumps
temp_file = "/home/templates/myfile.tmpl"
temp = tempenv.get_template(temp_file)
ifconf = [
{
"Interface": "eth0",
"IP": "172.45.100.239",
"MAC": "48:4d:7e:55:4e:z8",
"Mask": "255.255.255.0",
"MTU": "1500"
},
{
"Interface": "lo",
"IP": "127.0.0.1",
"MAC": "",
"Mask": "255.0.0.0",
"MTU": "65536"
},
{
"Interface": "tun0",
"IP": "10.120.20.229",
"MAC": "00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00",
"Mask": "255.255.255.255",
"MTU": "1400"
},
{
"Interface": "vboxnet0",
"IP": "192.168.43.1",
"MAC": "0a:00:27:00:00:00",
"Mask": "255.255.255.0",
"MTU": "1500"
}
]
inp = {"data":ifconf}
out = temp.render(inp)
print out
, 我的期望输出应该是这样的
{'Interface': ['eth0', 'lo', 'tun0', 'vboxnet0'], 'IP': ['172.23.106.239', '127.0.0.1', '10.120.233.229', '192.168.33.1'], 'MAC': ['48:4d:7e:9e:4e:b8', '', '00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00', '0a:00:27:00:00:00'], 'Mask': ['255.255.255.0', '255.0.0.0', '255.255.255.255', '255.255.255.0'], 'MTU': ['1500', '65536', '1400', '1500']}
的神社模板文件:myfile.tmpl
{%- set di = dict.fromkeys(data[0],[]) -%}
{%- for i in data -%}
{%- for k,v in di.items() -%}
{%- for x,y in i.items() -%}
{%- if x == k -%}
{%- set dummy = di[k].append(y)-%}
{%- break -%}
{%- else -%}
{%- continue -%}
{%- endif -%}
{%- endfor -%}
{%- endfor -%}
{%- endfor -%}
{{di}}
我知道如果我不使用循环控制扩展,break和continue在jinja中不起作用。 即使使用循环控制扩展后,我没有得到所需的输出。
难道你们,请帮我:
要使用闭环控制的扩展,从而获得所需的输出
为了获得无闭环控制扩展所需的输出(因为我的要求纠正神社模板是我不应该使用循环控制扩展。)
@DanielRoseman试图获得所需的输出上文提到的。 – sans0909