Jinja2将字典列表视为字符串

时间:2019-06-07 16:59:04

标签: templates ansible jinja2

我正在使用ansible解析jinja2模板。 jinja2模板具有一段代码,该代码应遍历作为字典列表的变量。但是,它将字典列表视为字符串并打印单个字符。请注意,ansible剧本中的变量为set_fact。

在j2模板中的字典列表上循环的代码:

{% for subscriber in subscribers %}
{% for dict_item in subscriber['filter_policy'] %}

    {{dict_item.name}}

{% endfor %}
{% endfor %}

在ansible的调试模块中作为输出变量:

 subscribers": [
        {
            "filter_policy": "[  {    \"name\": \"Severity\",    \"type\": \"CommaDelimitedList\",    \"value\": \"critical\"  },  {    \"name\": \"Environment\",    \"type\": \"CommaDelimitedList\",    \"value\": \"nonprod\"  }]",
            "id": "blah@blah.com"
        }
    ]

Ansible给我一个错误,说:     “ msg”:“ AnsibleUndefinedVariable:'str对象'没有属性'name'”

但是,如果我在jinja2模板中使用set来为变量分配相同的值并使用for循环,则效果很好。

{% set policies = [{"name": "Severity","type": "CommaDelimitedList","value": "critical"},{"name": "Environment","type": "CommaDelimitedList","value": "nonprod"}] %}

我不知道如何解决。

ansible 2.7.2
python version = 3.7.3 (default, Mar 27 2019, 09:23:39) [Clang 10.0.0 (clang-1000.11.45.5)]

1 个答案:

答案 0 :(得分:0)

<FormGroup> <ControlLabel>Username</ControlLabel> <FormControl className={this.props.username==""||undefined?"empty":"no-empty")} type="text" value="" onChange={this.handleChange.bind(this, 'username')} /> </FormGroup> 变量实际上包含一个字符串,该字符串恰好是字典列表的json表示形式。您只需要使用from_json filter

将该json字符串解码为有效的字典列表即可
filter_policy