Jinja2模板变量转为单行

10

有没有可能创建一个jinja2模板,将变量放在同一行上?就像这样,但是结果不要分成两行,而是用逗号分隔它们。

模板:

{% for host in groups['tag_Function_logdb'] %}
elasticsearch_discovery_zen_ping_unicast_hosts = {{ host }}:9300
{% endfor %}

结果:

elasticsearch_discovery_zen_ping_unicast_hosts = 1.1.1.1:9300
elasticsearch_discovery_zen_ping_unicast_hosts = 2.2.2.2:9300

预期结果:

elasticsearch_discovery_zen_ping_unicast_hosts = 1.1.1.1:9300,2.2.2.2:9300

编辑,此方法适用于2项,下面有更好的解决方案:

elasticsearch_discovery_zen_ping_unicast_hosts = {% for host in groups['tag_Function_logdb']  %}
{{ host }}:9300
{%- if loop.first %},{% endif %}
{% endfor %}

1
可能是重复的问题:如何在Jinja Python模板中输出逗号分隔列表? - nelsonda
“这个有效”不正确(或者,只对两个项目有效)- 请重新编辑为“这个适用于两个项目”。 - Gedge
@gedge 完成了,感谢指出。 - tweeks200
3个回答

16

这是对我有用的解决方案。 我发现tweeks200的解决方案仅适用于2个循环。 不管循环次数如何,这种方法都有效。 感谢在此处提供帮助的每个人。

elasticsearch_discovery_zen_ping_unicast_hosts={% for host in groups['tag_Function_logdb']  %}
{{ host }}:9300
{%- if not loop.last %},{% endif %}
{% endfor %}

3

我通过在循环前放置想要的指令,然后使用loop.first-空格控制来正确格式化逗号分隔列表,成功地让它工作。

elasticsearch_discovery_zen_ping_unicast_hosts = {% for host in groups['tag_Function_logdb']  %}
{{ host }}:9300
{%- if loop.first %},{% endif %}
{% endfor %}

1
检查语句应该是 if not loop.last,否则对于超过2个元素的循环将无法正常工作。 - ElementalStorm

2
这是如何做到的:

以下是步骤:

elasticsearch_discovery_zen_ping_unicast_hosts =  

 {% for host in groups['tag_Function_logdb']  %}

    {{ host }}:9300

    {% if not groups['tag_Function_logdb'].last %}
, 
    {% endif %}

{% endfor %}

谢谢,有一些进展。elasticsearch_discovery_zen_ping_unicast_hosts =  没有被填充,而只是显示为文本。这应该在循环的一部分中吗? - tweeks200

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接