Jinja - jedes zweite Element

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

Jinja - jedes zweite Element

Beitragvon nemomuk » Samstag 29. November 2008, 18:36

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: 7471
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Beitragvon Hyperion » Samstag 29. November 2008, 19:00

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: 7471
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Beitragvon Hyperion » Samstag 29. November 2008, 22:08

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

Beitragvon nemomuk » Samstag 29. November 2008, 22:38

ja, das ist echt super! Danke!
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 29. November 2008, 23:00

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 Modvoice
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Beitragvon sma » Sonntag 30. November 2008, 10:18

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

Beitragvon Y0Gi » Sonntag 30. November 2008, 12:42

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.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder