[Bottle] Tabellenspalten unterschiedlich färben (odd-even)

Django, Flask, Bottle, WSGI, CGI…
Antworten
lackschuh
User
Beiträge: 281
Registriert: Dienstag 8. Mai 2012, 13:40

Hallo

Ich zieh mir Daten aus einer Datenbank. Zur besseren Übersicht will ich nun abwechslungsweise die Spalten färben. Die beiden Klassen habe ich bereits in der CSS erstellt:

Code: Alles auswählen

.td_element_odd {
    font-weight: normal;
    font-size : 11px;
    background-color : #DDDDDD;
    margin-left : 0px;
    padding-left :4px;
    color : Black;
}
.td_element_even {
    font-weight: normal;
    font-size : 11px;
    background-color : #CCCCCC;
    margin-left : 0px;
    padding-left : 4px;
    color : Black;
}
Im Template sieht es so aus:

Code: Alles auswählen

<table width="100%" border="0" cellspacing="1" cellpadding="0">
    
	  <tr>
		<td width="30" class="td_head1">ID</td>
		<td align="left" class="td_head1">Titel</td>
		<td width="100" align="left" class="td_head1">Vorname</td>
		<td align="left" class="td_head1">Nachname</td>
		<td align="left" class="td_head1">Autortyp</td>
        <td align="left" class="td_head1">Verlag</td>
        <td align="left" class="td_head1">Jahr</td>
        <td align="left" class="td_head1">Standort</td>
        <td align="left" class="td_head1">Kategorie</td>
	  </tr>
%for row in rows:
   %for col in row:
    <td>{{col}}</td>
  %end
  </tr>
%end
</table>
Nun müsste ich für die erste Spalte <tr class="td_element_odd" align="left">, für die zwite <tr class="td_element_even" align="left">, für die dritte wieder odd usw. Also irgendwie

Code: Alles auswählen

%for row in rows:
 <tr class="td_element_odd" align="left">
   %for col in row:
Für Django hätte ich nach längerer Suche wohl eine Lösung gefunden. Wenn jemand einen Tipp hätte, wäre ich sehr froh.

lg
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Ich kenne mich mit der Bottle Template Engine nicht aus aber die zweite Variante sollte funktionieren, vielleicht auch die erste.
Vielleicht macht der modulo Operator aber auch ärger.

Variante 1:

Code: Alles auswählen

%for i, row in enumerate(rows):
%classname = "td_element_even" if i % 2 == 0 else "td_element_odd"
<tr class="{{classname}}" align="left">
   %for col in row:
Variante 2:

Code: Alles auswählen

%for i, row in enumerate(rows):
%if i % 2 == 0:
<tr class="td_element_even" align="left">
%else:
<tr class="td_element_even" align="left">
%end
   %for col in row:
*edit*
Sofunktioniert auch Variante 1

Variante 1:

Code: Alles auswählen

%for i, row in enumerate(rows):
%setdefault("classname", "td_element_even" if i % 2 == 0 else "td_element_odd")
<tr class="{{classname}}" align="left">
   %for col in row:
lackschuh
User
Beiträge: 281
Registriert: Dienstag 8. Mai 2012, 13:40

Hallo

Vielen lieben Dank. Beide Varianten funktionierten.

lg

PS: ich war auch schon am überlegen, wie ich gerade und ungerade Spaltennummern herausfinden kann. Aber auf die einfache aber geniale Idee, den Rest einer ganzzahligen Division wäre ich wahrscheinlich nie im Leben gekommen :lol:
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ich mag ja `itertools.cycle` für solche Sachen.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Ich würde ja einfach CSS dafür verwenden: http://www.w3.org/Style/Examples/007/evenodd.en.html
lackschuh
User
Beiträge: 281
Registriert: Dienstag 8. Mai 2012, 13:40

apollo13 hat geschrieben:Ich würde ja einfach CSS dafür verwenden: http://www.w3.org/Style/Examples/007/evenodd.en.html
Vielen Dank für die Info. Dies ist wohl die einfachste Lösung. :wink:
Antworten