【发布时间】:2015-05-07 06:07:26
【问题描述】:
jinja2 有过滤器“|default()”来处理未定义的变量。但它不适用于字典值。
如果 D 可能有或没有键 foo (D[foo]),则:
{{ D[foo]|default ('no foo') }}
如果 D 未定义,将打印 'no foo',但如果 D 已定义,但 D[foo] 未定义,则会导致错误('dict object' 没有属性 'foo')。
有什么方法可以为字典项设置默认值吗?
【问题讨论】:
jinja2 有过滤器“|default()”来处理未定义的变量。但它不适用于字典值。
如果 D 可能有或没有键 foo (D[foo]),则:
{{ D[foo]|default ('no foo') }}
如果 D 未定义,将打印 'no foo',但如果 D 已定义,但 D[foo] 未定义,则会导致错误('dict object' 没有属性 'foo')。
有什么方法可以为字典项设置默认值吗?
【问题讨论】:
这似乎对我使用 Ansible 1.7.2 正常工作。这是我刚刚编写的测试手册:
---
- hosts: localhost
vars:
D:
1 : "one"
2 : "two"
tasks:
- debug: var=D
- debug: msg="D[1] is {{ D[1]|default ('undefined') }}"
- debug: msg="D[3] is {{ D[3]|default ('undefined') }}"
这是运行它的输出:
TASK: [debug var=D] ***********************************************************
ok: [localhost] => {
"D": {
"1": "one",
"2": "two"
}
}
TASK: [debug msg="D[1] is one"] ***********************************************
ok: [localhost] => {
"msg": "D[1] is one"
}
TASK: [debug msg="D[3] is undefined"] *****************************************
ok: [localhost] => {
"msg": "D[3] is undefined"
}
【讨论】: