在我的Jinja2代码中,宏getLisCustomer()
用于获取返回的客户ID列表,其定义如下:
{% macro getLisCustomer() %}
{% set myList = [] %}
{% if myList.append('CU001') %}{% endif %}
{% if myList.append('CU002') %}{% endif %}
{% if myList.append('CU003') %}{% endif %}
{{myList}}
{% endmacro %}
但是,当我尝试从宏getLisCustomer()
获取单个客户ID时,我得到的是单个字符的列表,而不是列表中的单个客户ID。
{% set TotalList = getLisCustomer() %}
{% for row in TotalList %}
<p>{{row}}</p>
{% endfor %}
结果是这样的[ ' C U 0 0....
。
怎么了?如何从Jinja2的宏getLisCustomer()
中获取列表元素?
已添加:我刚刚意识到根本原因可能是我的宏未返回列表,而是返回了类似列表的字符串,这就是在for-loop
中返回每个字符的原因列表元素。因此,如何将类似列表的字符串转换为实际列表?
答案 0 :(得分:0)
您可以像使用逗号分隔的列表表示一样简单,在使用时将其拆分为列表:
{% macro getLisCustomer() -%}
{% set myList = [] -%}
{% if myList.append('CU001') %}{% endif -%}
{% if myList.append('CU002') %}{% endif -%}
{% if myList.append('CU003') %}{% endif -%}
{% for i in myList %}{{ i }}{% if not loop.last %},{% endif %}{% endfor -%}
{% endmacro %}
这可以进一步简化,因为您实际上不需要创建myList
,因此可以立即打印这些值。
然后:
{% set TotalList = getLisCustomer().split(',') -%}
{% for row in TotalList %}
<p>{{row}}</p>
{%- endfor %}
或者如果出于某种原因想要实现数据交换协议,则可以在Python中创建自定义过滤器(基于Ansible扩展Jinja2的方式查看我的first edit)。