Конкатенация строк в Джинджа - PullRequest
35 голосов
/ 14 января 2010

Я просто хочу пройтись по существующему списку и сделать из него строку с разделителями-запятыми.
Примерно так: my_string = 'stuff, stuff, stuff, stuff'

Я уже знаю о loop.last, мне просто нужно знать, как сделать третью строку в моем коде ниже WORK.

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

Ответы [ 5 ]

63 голосов
/ 14 января 2010

Если stuffs - это список строк, просто это будет работать:

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

Ссылка на документацию.

9 голосов
/ 16 марта 2019

Вам нужно использовать ~ вместо + для объединения строк в Jinja.

{% set my_string = my_string ~ stuff ~ ', '%}
7 голосов
/ 14 января 2010

Плохо, пытаясь упростить это, я зашел слишком далеко, на самом деле stuffs - это запись всех видов информации, я просто хочу, чтобы в ней был идентификатор.

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(', ') %}

Но приложение не работает без импорта расширений, и чтение этой документации доставило мне головную боль. В нем явно не указано, откуда его импортировать или даже куда вы поместили бы оператор import, поэтому я решил, что поиск пути к concat будет меньшим из двух зол.

1 голос
/ 19 июля 2016

Так может быть еще один хак.

У меня есть массив строк, которые мне нужно объединить. Поэтому я добавил этот массив в словарь, а затем использовал его внутри для цикла, который работал.

{% set dict1 = {'e':''} %}
{% for i in list1 %}
{% if dict1.update({'e':dict1.e+":"+i+"/"+i}) %} {% endif %}
{% endfor %}
{% set layer_string = dict1['e'] %}
0 голосов
/ 19 декабря 2017

Если вы не можете просто использовать фильтр объединения, но нужно выполнить некоторые операции над записью массива:

{% for entry in array %}
User {{ entry.attribute1 }} has id {{ entry.attribute2 }}
{% if not loop.last %}, {% endif %}
{% endfor %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...