Jinja中的字符串连接

时间:2010-01-14 00:41:16

标签: string jinja2

我只想循环遍历现有列表并从中制作逗号分隔的字符串。
这样的事情:my_string = 'stuff, stuff, stuff, stuff'

我已经了解loop.last,我只需要知道如何在我的代码中将第三行设置为WORK。

{% set my_string = '' %}
{% for stuff in stuffs %}
{% set my_string = my_string + stuff + ', '%}
{% endfor%}

5 个答案:

答案 0 :(得分:62)

如果stuffs是一个字符串列表,那么这将起作用:

{{ stuffs|join(", ") }}

Link到文档。

答案 1 :(得分:7)

我的不好,在试图简化它时,我走得太远,实际上stuffs是各种信息的记录,我只想要其中的id。

stuffs = [[123, first, last], [456, first, last]]

我希望my_sting成为

my_sting = '123, 456'

我原来的代码应该是这样的:

{% set my_string = '' %}
{% for stuff in stuffs %}
{% set my_string = my_string + stuff.id + ', '%}
{% endfor%}

考虑到这一点,stuffs可能是一本字典,但你得到了要点。

是的,我找到了join过滤器,并且会像这样接近它:

 {% set my_string = [] %}
 {% for stuff in stuffs %}
 {% do my_string.append(stuff.id) %}
 {% endfor%}
 {%  my_string|join(', ') %}

但如果没有导入扩展程序就可以使用append,并且阅读该文档会让我头疼。它没有明确说明从哪里导入它,甚至在哪里都会输入import语句,所以我认为找到一种方法来连接将是两个邪恶中较小的一个。

答案 2 :(得分:5)

您需要使用~而不是+来连接Jinja中的字符串。

{% set my_string = my_string ~ stuff ~ ', '%}

答案 3 :(得分:1)

只是另一个黑客可以是这样的。

我有需要连接的字符串数组。所以我把这个数组添加到字典中,然后在里面使用它来循环工作。

{% set dict1 = {'e':''} %}
{% for i in list1 %}
{% if dict1.update({'e':dict1.e+":"+i+"/"+i}) %} {% endif %}
{% endfor %}
{% set layer_string = dict1['e'] %}

答案 4 :(得分:0)

如果您不能使用过滤器加入,但需要对阵列条目执行某些操作:

{% for entry in array %}
User {{ entry.attribute1 }} has id {{ entry.attribute2 }}
{% if not loop.last %}, {% endif %}
{% endfor %}