2010-01-14 22 views
22

Solo quiero recorrer una lista existente y hacer una cadena delimitada por comas.
Algo como esto: my_string = 'stuff, stuff, stuff, stuff'Concatenación de cadenas en Jinja

ya que sé sobre loop.last, sólo necesita saber cómo hacer la tercera línea en mi código de abajo TRABAJO.

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

Aceptar que el código original, he publicado trabajos, lo tenía en {{}} en mi código actual en lugar de {%%} He estado buscando y buscando la mejor manera de abordarlo y las cosas disponibles para mí, y eso fue al final del día en la noche, por lo que {{} } se deslizó en mi frustración. Gracias por la respuesta, aunque – KacieHouser

Respuesta

42

Si stuffs es una lista de cadenas, al igual que esto funcionaría:

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

Link a la documentación.

+0

bueno, no pude encontrar esto en los documentos. – doug

+6

recuerde usar ~ en lugar de + [como se dice aquí] (http://jinja.pocoo.org/docs/templates/#other-operators) – Josmar

3

Malo, al tratar de simplificarlo, fui demasiado lejos, en realidad stuffs es un registro de todo tipo de información, solo quiero la identificación.

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

Quiero my_sting ser

my_sting = '123, 456' 

Mi código original debe haber parecido esto:

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

Pensando en ello, stuffs es, probablemente, un diccionario, pero se obtiene lo esencial .

Sí me encontré con el filtro join, y que iba a acercarse a él de esta manera:

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

Pero el anexados no funciona sin importar las extensiones de hacerlo, y la lectura de la documentación que me dio un dolor de cabeza . No dice explícitamente dónde importarlo o incluso dónde pondría la declaración de importación, así que pensé que encontrar una forma de concaturizar sería el menor de los dos males.

+3

Desde 2.6 puede seleccionar un atributo en el filtro de combinación. Así que podrías hacer {{stuffs.join (',', attribute = 'id')}} ver http://jinja.pocoo.org/docs/templates/#join – dmertl

0

Solo otro truco puede ser así.

Tengo una matriz de cadenas que necesito concatenar. Entonces agregué esa matriz al diccionario y luego la utilicé para el ciclo que funcionó.

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

Si no se puede simplemente usar filtro de combinación, pero necesitará realizar algunas operaciones sobre la entrada de la matriz:

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