如何在Jinja中将for循环迭代输出存储为逗号分隔的变量
Jinja模板将循环迭代结果存为变量并生成逗号分隔字符串的方法
需求说明
需要将for循环迭代生成的多个服务器名称拼接为逗号分隔的字符串,预期输出格式为:
all_servers=test-vm-0,test-vm-1,test-vm-2,test-vm-3
实现代码
首先修正参考代码的语法问题({% %}代码块内调用变量不需要额外加{{ }}),完整可运行代码如下:
{# 读取实例数量配置 #} {% set instanceCount = properties["instanceCount"] %} {# 初始化空列表存储每个服务器名称 #} {% set all_servers = [] %} {% for vmIndex in range(instanceCount) %} {# 循环拼接服务器名称并追加到列表 #} {% do all_servers.append(env["deployment"] ~ "-vm-" ~ vmIndex) %} {% endfor %} {# 用join过滤器把列表转为逗号分隔的字符串,赋值给最终变量 #} {% set all_servers_str = "all_servers=" ~ all_servers|join(',') %} {# 输出结果或者直接调用all_servers_str变量使用 #} {{ all_servers_str }}
关键要点说明
- 列表初始化:用
{% set 变量名 = [] %}初始化空列表存储迭代生成的每一项 - 列表追加:Jinja中要修改列表内容需要用
{% do %}语句调用append方法,不能直接在set语句里修改列表 - 变量拼接:在
{% %}代码块内部做字符串拼接用~运算符,不要嵌套{{ }}调用变量,否则会触发语法错误 - 列表转字符串:用Jinja内置的
join过滤器,传入分隔符参数即可把列表所有元素拼接为单个字符串,分隔符可自定义,此处用逗号即可
内容的提问来源于stack exchange,提问作者Suhasini Subramaniam
相关产品推荐
相关产品推荐

