2012-08-15 21 views
89

Si tengo una lista de users decir ["Sam", "Bob", "Joe"], quiero hacer algo en lo que puede dar salida en mi jinja archivo de plantilla:¿Cómo se genera una lista delimitada por comas en la plantilla de jinja python?

{% for user in userlist %} 
    <a href="/profile/{{ user }}/">{{ user }}</a> 
    {% if !loop.last %} 
     , 
    {% endif %} 
{% endfor %} 

Quiero hacer sea la plantilla de salida:

Sam, Bob, Joe 

Probé el código anterior para comprobar si estaba en la última iteración del ciclo y si no, entonces no inserte una coma, pero no funciona. ¿Cómo hago esto?

+0

jinja, como Python, no utiliza '!' Como operador de negación. "no" se deletrea "no". – geoffspear

Respuesta

150

usted quiere que su cheque if sea:

{% if not loop.last %} 
    , 
{% endif %} 

Tenga en cuenta que también se puede acortar el código utilizando If Expression:

{{ "," if not loop.last }} 
+1

Esto es increíble, especialmente al final del ciclo en html – Sinux

+0

¡Muy limpio y conciso! –

+3

Solo fyi, es posible que necesite hacer de esto un if/else en función de su configuración. Más información. se puede encontrar aquí: https://github.com/pallets/jinja/issues/710 –

107

también se puede utilizar la orden interna "unir" filtro (http://jinja.pocoo.org/docs/templates/#join como este:

{{ users|join(', ') }} 
+1

Mientras esto funciona para crear un csv, viendo su ejemplo anterior, no se puede usar con el anclaje circundante. – triunenature

+0

Este enfoque también no funciona bien con escapar: [ '{{[' a \ '', 'b'] | unen (" ''")}} '] produce [' a ' ', ' b '] – stewbasic

+0

Esto debería ser lo primero que se intentó. Si no funciona como lo desea, intente con otra solución, pero esto es definitivamente más limpio. – Jerad

44

Y Utilizando el joiner de http://jinja.pocoo.org/docs/dev/templates/#joiner

{% set comma = joiner(",") %} 
{% for user in userlist %} 
    {{ comma() }}<a href="/profile/{{ user }}/">{{ user }}</a> 
{% endfor %} 

Está hecho para este propósito exacto.

+0

Esto realmente funcionó bastante bien para mí, sin dejar una coma al final. Gracias por este! –

Cuestiones relacionadas