Seite 1 von 1
					
				Liste an Cheetah übergeben ?
				Verfasst: Dienstag 4. Dezember 2007, 00:23
				von debian75
				moin
ich möchte eine liste an ein cheetah.tmpl übergeben. leider bekomme ich einen "IndexError: string index out of range" error. template.title geht, aber die liste nicht.
Code: Alles auswählen
li = []
li.append('1')
li.append('2')
etc...
template.title ="Hello World"
template.li = li
return str(template)
 
Code: Alles auswählen
<table>
<tr>
<b>$title</b
<br>
#for $s in $li
<td><img src='$s[0]'></td>
<td valign='top'>$s[1]<br>
Broschiert<br>
Name: $s[2]<br>
Vorname: $s[3]<br>
</td>
#end for
</tr>
</table>
#end block main
 
			 
			
					
				
				Verfasst: Dienstag 4. Dezember 2007, 08:31
				von BlackJack
				Das hat nichts mit Listen oder Cheetah zu tun.  Folgender halbwegs äquivalenter, reiner Python-Code hat genau das gleiche Problem:
Code: Alles auswählen
li = ['1', '2', '3']
for s in li:
    print s[0]
    print s[1]
Eine Zeichenkette der Länge 1 hat eben kein zweites Zeichen -> `IndexError`.
 
			 
			
					
				Re: Liste an Cheetah übergeben ?
				Verfasst: Dienstag 4. Dezember 2007, 08:33
				von gerold
				debian75 hat geschrieben:Code: Alles auswählen
li = []
li.append('1')
li.append('2')
template.li = li
return str(template)
 
Code: Alles auswählen
#for $s in $li
  <td><img src='$s[0]'></td>
  <td valign='top'>$s[1]<br>
#end for
 
Hallo debian75!
``#for $s in $li`` geht jeden Eintrag der Liste durch.
Deine Liste sieht so aus: ``['1', '2', '3']``
Ein Eintrag sieht dann so aus: ``'1'``
Du kannst zwar mit ``$s[0]`` das erste Zeichen dieses Listeneintrages heraus holen, aber ein ``$s[1]`` gibt den Fehler, da in diesem String kein zweites Zeichen drinnen ist.
Du müsstest deine Liste so befüllen:
Code: Alles auswählen
li = []
li.append(('http://hallo.xx/image1.jpg', 'Das ist ein Bild'))
li.append(('http://hallo.xx/image2.jpg', 'Das ist noch ein Bild'))
Diese Liste würde dann so aussehen:
Code: Alles auswählen
[
    ('http://hallo.xx/image1.jpg', 'Das ist ein Bild'),
    ('http://hallo.xx/image2.jpg', 'Das ist noch ein Bild'),
]
Dann kannst du auch mit ``$s[0]`` und ``$s[1]`` auf die beiden Einträge zugreifen.
mfg
Gerold

 
			 
			
					
				
				Verfasst: Dienstag 4. Dezember 2007, 10:27
				von debian75
				hallo gerold,
das wunder mit etwas, weil wenn ich in der konsole print li[0] mache, dann printet er mir nicht nur einen buchstaben, sondern das ganze wort.
im prinzip will ich sowas wie nen array
Code: Alles auswählen
li = ['hallo', 'ich', 'bin', 'ein', 'array']
print li[0] ergibt --> hallo
print li[1] ergibt --> ich
etc...
ich bin sicher mit deinem vorlschlag bekomm ich das irgendwie hin.
naja, mal rumspielen wenn ich heim komme.
thnx und gruss
 
			 
			
					
				
				Verfasst: Dienstag 4. Dezember 2007, 10:36
				von gerold
				debian75 hat geschrieben:Code: Alles auswählen
li = ['hallo', 'ich', 'bin', 'ein', 'array']
print li[0] ergibt --> hallo
print li[1] ergibt --> ich
 
Hallo debian75!
Aber du machst ja das hier:
Code: Alles auswählen
li = ['hallo', 'ich', 'bin', 'ein', 'array']
for s in li:
    print s[0] # ergibt: "h" und nicht "hallo"
mfg
Gerold

 
			 
			
					
				
				Verfasst: Dienstag 4. Dezember 2007, 12:22
				von Jan-Peer
				Noch deutlicher: Du hast da ein Verständnisproblem bezüglich der for-Schleife:
for s in li  heißt nichts anderes, als das er `s` bei jedem Durchlauf das nächste Element der Liste zuweist.
Was du zu konstruieren versucht hast (wie man es ja aus anderen Sprachen kennt) wäre ein Laufindex über der Länge der Liste, in Python folgendermaßen zu lösen:
 
			 
			
					
				
				Verfasst: Dienstag 4. Dezember 2007, 12:32
				von BlackJack
				Wobei man letzteres nicht machen sollte, da unnötig komplex.