Wenn ich eine Liste mit users
Worten habe ["Sam", "Bob", "Joe"]
, möchte ich etwas tun, das ich in meiner Jinja-Vorlagendatei ausgeben kann:
{% for user in userlist %}
<a href="/profile/{{ user }}/">{{ user }}</a>
{% if !loop.last %}
,
{% endif %}
{% endfor %}
Ich möchte die Ausgabevorlage wie folgt gestalten:
Sam, Bob, Joe
Ich habe versucht, mit dem obigen Code zu überprüfen, ob er sich in der letzten Iteration der Schleife befand. Wenn nicht, fügen Sie kein Komma ein, aber es funktioniert nicht. Wie mache ich das?
!
als Negationsoperator verwendet. "nicht" wird "nicht" geschrieben.Antworten:
Sie möchten, dass Ihr
if
Scheck lautet:Beachten Sie, dass Sie den Code auch mit If Expression verkürzen können :
quelle
{{ "," if not forloop.last }}
{{ "," if not loop.last else "" }}
Sie können auch den integrierten "Join" -Filter ( http://jinja.pocoo.org/docs/templates/#join) wie folgt verwenden :
quelle
ansible -i localhost, all -m debug -a "msg=\"{{ [ 'a','b','c' ]|join('X') }}\""
Und mit dem
joiner
von http://jinja.pocoo.org/docs/dev/templates/#joinerEs ist genau für diesen Zweck gemacht. Normalerweise würde ein Join oder eine Überprüfung von forloop.last für eine einzelne Liste ausreichen, aber für mehrere Gruppen von Dingen ist es nützlich.
Ein komplexeres Beispiel, warum Sie es verwenden würden.
quelle
Der folgende Code funktionierte mit dem in der Python3.5-Shell vorgeschlagenen jinja2-Join-Filter Uli Martens:
quelle