2012-08-15 5 views
89

Wenn ich eine Liste von users haben sagen ["Sam", "Bob", "Joe"], möchte ich etwas tun, wo ich ausgeben kann in meinem jinja Template-Datei:Wie eine kommagetrennte Liste in Jinja Python-Vorlage ausgeben?

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

Ich möchte, dass die Ausgabevorlage machen sein:

Sam, Bob, Joe 

Ich habe den obigen Code versucht, um zu überprüfen, ob es in der letzten Wiederholung der Schleife war, und wenn nicht, dann fügen Sie kein Komma ein, aber es funktioniert nicht. Wie mache ich das?

+0

jinja, wie Python, verwendet '!' Nicht als Negationsoperator. "nicht" wird "nicht" geschrieben. – geoffspear

Antwort

150

Sie möchten Ihre if Scheck sein:

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

Beachten Sie, dass Sie auch den Code unter Verwendung If Expression verkürzen:

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

Das ist super, vor allem am Ende der Schleife in html – Sinux

+0

Sehr sauber und prägnant! –

+3

Nur fyi, Sie müssen dies möglicherweise zu einem if/else basierend auf Ihren Einstellungen machen. Mehr Info. kann hier gefunden werden: https://github.com/pallets/jinja/issues/710 –

107

Sie auch die eingebaute verwenden könnte "join" Filter (http://jinja.pocoo.org/docs/templates/#join wie folgt:

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

Während dies funktioniert für die Erstellung eines CSV, sein zu sehen Beispiel oben kann es nicht mit dem umgebenden Anker verwendet werden. – triunenature

+0

Dieser Ansatz funktioniert auch nicht gut mit Flucht: [ '{{[' a \ '', 'b'] | join (" ''")}} '] erzeugt [' a ' ', ' b '] – stewbasic

+0

Dies sollte zuerst versucht werden. Wenn es nicht wie gewünscht funktioniert, versuchen Sie eine andere Lösung, aber das ist definitiv am saubersten. – Jerad

44

Und die joiner von der Nutzung http://jinja.pocoo.org/docs/dev/templates/#joiner

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

Es ist für genau diesen Zweck hergestellt.

+0

Das funktionierte wirklich ziemlich gut für mich, ohne ein abschließendes Komma zu hinterlassen. Danke für diesen! –

Verwandte Themen