Wie kann ich eine durch Kommas getrennte Liste in einer Jinja-Python-Vorlage ausgeben?
Lesezeit: 3 Minuten
Rolando
Wenn ich eine Liste habe users sagen ["Sam", "Bob", "Joe"]ich möchte etwas tun, wo ich in meiner Jinja-Vorlagendatei ausgeben kann:
{% for user in userlist %}
<a href="https://stackoverflow.com/profile/{{ user }}/">{{ user }}</a>
{% if !loop.last %}
,
{% endif %}
{% endfor %}
Ich möchte die Ausgabevorlage wie folgt gestalten:
Sam, Bob, Joe
Ich habe den obigen Code ausprobiert, um zu überprüfen, ob es sich um die letzte Iteration der Schleife handelt, und wenn nicht, fügen Sie kein Komma ein, aber es funktioniert nicht. Wie mache ich das?
jinja verwendet wie Python keine ! als Negationsoperator. „not“ wird „not“ geschrieben.
– Wackel
15. August 2012 um 17:49 Uhr
Joe Tag
Du willst deine if überprüfen zu sein:
{% if not loop.last %}
,
{% endif %}
Beachten Sie, dass Sie den Code auch kürzen können, indem Sie verwenden Wenn Ausdruck:
{{ ", " if not loop.last else "" }}
Das ist großartig, besonders am Ende der Schleife in HTML
– Sinux
27. August 2015 um 14:38 Uhr
Nur zu Ihrer Information, Sie müssen dies möglicherweise basierend auf Ihren Einstellungen zu einem if/else machen. Mehr Info. finden Sie hier: github.com/pallets/jinja/issues/710
– Paul Calabro
19. September 2017 um 23:24 Uhr
oder ist einige Fälle {{ "," if not forloop.last }}
– obotezat
3. Oktober 2017 um 13:09 Uhr
Ich stimme dem Kommentar über das Hinzufügen eines anderen zu. Das hat bei mir funktioniert {{ "," if not loop.last else "" }}
– ahong
5. Juli 2019 um 16:00 Uhr
In meinem Fall war es forloop Anstatt von loop und {% Anstatt von {{so was: {% if not forloop.last %},{% endif %}. Andere Lösungen haben nicht funktioniert
– PD
14. Oktober 2020 um 12:46 Uhr
Ulli Martens
Du könntest auch das eingebaute verwenden join so filtern:
{{ users|join(', ') }}
Dies funktioniert zwar zum Erstellen einer CSV-Datei, siehe sein obiges Beispiel, kann aber nicht mit dem umgebenden Anker verwendet werden.
– Dreieinigkeit
22. November 2015 um 6:18 Uhr
Dieser Ansatz funktioniert auch nicht gut mit Flucht: [‘{{ [‘a\”, ‘b’]|join(“‘, ‘”) }}’]produziert [‘a'', 'b’]
– Eintopfbasic
24. November 2015 um 3:34 Uhr
Dies sollte als erstes versucht werden. Wenn es nicht wie gewünscht funktioniert, versuchen Sie es mit einer anderen Lösung, aber diese ist definitiv die sauberste.
– Jarad
22. Juli 2017 um 15:40 Uhr
Dies gibt ein nachgestelltes Komma, wie werde ich das los?
– Jonathan
17. November 2017 um 19:12 Uhr
Sie haben wahrscheinlich ein nachfolgendes leeres Element. Wenn Sie drei Elemente abc haben, erhalten Sie aXbXc, wenn Sie mit X verbinden: ansible -i localhost, all -m debug -a "msg=\"{{ [ 'a','b','c' ]|join('X') }}\""
{% set comma = joiner(",") %}
{% for user in userlist %}
{{ comma() }}<a href="/profile/{{ user }}/">{{ user }}</a>
{% endfor %}
Es 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.
jinja verwendet wie Python keine
!
als Negationsoperator. „not“ wird „not“ geschrieben.– Wackel
15. August 2012 um 17:49 Uhr