jinja2有过滤器'| default()'来处理未定义的变量。但它不适用于字典值。
如果D可能有或没有密钥foo(D [foo]),而不是:
{{ D[foo]|default ('no foo') }}
如果D未定义,将打印'no foo',但如果定义了D,则会导致错误('dict对象'没有属性'foo'),但D [foo]未定义。
是否可以为字典项设置默认值?
答案 0 :(得分:14)
这似乎对我使用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"
}