Jinja2嵌套变量

8

我目前正在学习jinja2,但我不确定如何正确地处理变量:

这是我的yaml变量:

---
hosts:
   app201.acme.com: {eth0: {ip: 46.0.0.1, netmask: 255.255.255.255}}
   graphite.acme.com: {eth0: {ip: 46.0.0.2, netmask: 255.255.255.255},
                       eth0.1: {ip: 10.2.90.1, netmask: 255.255.255.255}}

以下是jinja2模板:

{{ fqdn }}
{% for interface in hosts[fqdn] %}
    {{ interface }}
    {{ hosts[fqdn].interface.ip }} << doesn't work
    {{ hosts[fqdn].{{ interface }}.ip }} << doesn't work
    {{ interface.ip }} << doesn't work
{% endfor %}

目前我的输出结果如下,因为我无法访问yaml哈希表的第二维。

graphite.acme.com eth0.1

eth0

1个回答

21
变量hosts是一个dict。访问dict中的值的正确方式是使用[]运算符。
{{ fqdn }}
{% for interface in hosts[fqdn] %}
    {{ interface }}
    {{ hosts[fqdn][interface]['ip'] }}
{% endfor %}

.运算符用于访问对象的属性。


1
@user1436955,非常欢迎。如果您认为这是您正在寻找的内容,可以将其标记为答案。 - Vikas
有趣的是,interface['ip']似乎不起作用,我猜这是因为interface被视为字符串而不是字典。 - Mateusz M.
@MateuszM,感谢您指出。这是从OP的代码片段中复制粘贴过来的,我忘记删除了。 - Vikas
{{form.fullName(class='form-control', value={{x}}, placeholder="名字 姓氏")}}如何将来自服务器的x值添加到Flask WTF表单中。 - Mahmoud Magdy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接