Si tengo una lista de users
palabras ["Sam", "Bob", "Joe"]
, quiero hacer algo donde pueda generar mi archivo de plantilla jinja:
{% for user in userlist %}
<a href="/profile/{{ user }}/">{{ user }}</a>
{% if !loop.last %}
,
{% endif %}
{% endfor %}
Quiero hacer que la plantilla de salida sea:
Sam, Bob, Joe
Intenté el código anterior para verificar si estaba en la última iteración del bucle y, si no, no inserte una coma, pero no funciona. ¿Cómo hago esto?
!
como operador de negación. "no" se deletrea "no".Respuestas:
Desea que su
if
cheque sea:Tenga en cuenta que también puede acortar el código utilizando If Expression :
fuente
{{ "," if not forloop.last }}
{{ "," if not loop.last else "" }}
también puede usar el filtro incorporado "join" ( http://jinja.pocoo.org/docs/templates/#join así:
fuente
ansible -i localhost, all -m debug -a "msg=\"{{ [ 'a','b','c' ]|join('X') }}\""
Y usando el
joiner
de http://jinja.pocoo.org/docs/dev/templates/#joinerEstá hecho para este propósito exacto. Normalmente, una combinación o una comprobación de forloop.last sería suficiente para una sola lista, pero para múltiples grupos de cosas es útil.
Un ejemplo más complejo de por qué lo usarías.
fuente
El siguiente código funcionó usando el filtro de unión jinja2 que Uli Martens sugirió en el shell python3.5:
fuente