Jinja - jedes zweite Element

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Hallo,

ich versuche gerade jede zweite Zeile mit einem bestimmten "Tag" auszustatten.

Code: Alles auswählen

{% for i in data %}
<a href="" {% if zwei %}class="test"{%endif%}>{{ i }}</a>
{% endfor %}
Auf deutsch: jedes zweite Element soll eine bestimmte Hintergrundfarbe bekommen. Wie mache ich das am geschicktesten?

Danke!
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

So was könnte per modulo Operator gelöst werden:

Code: Alles auswählen

{% for i in data %}
<a href="" {% if loop.index0 % 2 %}class="test"{%endif%}>{{ i }}</a>
{% endfor %}
Habs nicht getestet, aber ich denke das sollte tun.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ok, geht sogar noch komfortabler:

Code: Alles auswählen

{% for i in data %}
<a href="" class="{{ loop.cycle('foo', 'bar') }}">{{ i }}</a>
{% endfor %}
Damit ist man sogar nicht nur auf zwei verschiedene Elemente beschränkt, sondern kann theoretisch beliebig viele unterscheiden. Coole Sache das! Ich mag Jinja immer mehr :-D
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

ja, das ist echt super! Danke!
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Wobei ``cycle`` durchaus auch schon in Django auch möglich war, nur dass die Django-Templates das mal über globale Variablen gemacht haben, was natürlich ziemlich blöd ist.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Leonidas hat geschrieben:Wobei ``cycle`` durchaus auch schon in Django auch möglich war, nur dass die Django-Templates das mal über globale Variablen gemacht haben, was natürlich ziemlich blöd ist.
Aktuell ist es eine Exemplarvariable von `CycleNode`, was nicht threadsafe wäre, wenn sich zwei Threads ein Template teilen. Ansonsten ist da aber nicht gegen zu sagen und es ist doch wohl egal, wie es mal war.

Stefan
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Mit `itertools.cycle()` oder `enumerate()` ist das in so ziemlich jeder Template-Sprache direkt oder indirekt möglich ;)

Ich bevorzuge ob des geringeren erforderlichen Codes auch seit Jahren den Weg, Zeilen immer mit einer Klasse zu versehen, also etwa `row0`, `row1` und optional weitere.
Antworten