Seite 1 von 1
print andere Ausgabe als im Template
Verfasst: Donnerstag 5. Februar 2015, 15:35
von django-yip
Hallo,
ich bin bisschen verwundert, dass "print" eine andere Ausgabe hat als im Template.
Beispiel:
Kommt als Ausgabe:
Wenn ich jetzt mit:
Code: Alles auswählen
...
test = (name)
pla = {'test':test}
return render_to_response('export.html', pla)
Kommt nur:
Jemand ne Idee, wieso das Template nur 1 Wert ausgibt und nicht wie bei print alle gewünschten?
Re: print andere Ausgabe als im Template
Verfasst: Donnerstag 5. Februar 2015, 15:43
von BlackJack
@django-yip: Also bei Python 2.x würde ich jetzt auf einen Unterschied zwischen `str()` (wird bei ``print`` verwendet) und `unicode()` (wird im Template verwendet) tippen. Ansonsten müsstest Du mal verraten was `name` ist. Und bist Du sicher das die ``print``-Ausgabe nur von einem Aufruf der Funktion stammt?
Edit: Wobei der Quelltext den Du zeigst nicht zusammenpasst: Du übergibst dem Template den Wert unter dem Namen 'test', im Template steht dann aber angeblich ``{{ name }}``. Was denn nun?
Re: print andere Ausgabe als im Template
Verfasst: Donnerstag 5. Februar 2015, 15:48
von django-yip
@BlackJack:
Code: Alles auswählen
for datetime in queryset:
for name in datetime.artikel_set.values_list('name', flat=True): print(name)
Code: Alles auswählen
for datetime in queryset:
for name in datetime.artikel_set.values_list('name', flat=True):
test = (name)
*** Edit:
Edit: Wobei der Quelltext den Du zeigst nicht zusammenpasst: Du übergibst dem Template den Wert unter dem Namen 'test', im Template steht dann aber angeblich ``{{ name }}``. Was denn nun?
Habs geändert. Passiert wenn man zuviel testet.
Re: print andere Ausgabe als im Template
Verfasst: Donnerstag 5. Februar 2015, 16:01
von BlackJack
@django-yip: So ganz passt es immer noch nicht denn ich würde im Template 'Test 3' erwarten.
Du hast ganz grundlegend nicht verstanden wie Schleifen und der Programmablauf funktionieren. Im ersten Fall gehst Du in einer Schleife alle Elemente durch und gibst in der Schleife jedes Element aus. Im zweiten Fall gehst Du alle Elemente durch und bindest in der Schleife jedes mal das aktuelle Element an den Namen `test` und gibst den Wert dann am Ende an die Funktion zum rendern des Templates. Also *den* *einen* Wert aus dem *letzten* Schleifendurchlauf. Denn natürlich ist nach einem ``test = 42`` der Name Test an den einen Wert (42) gebunden, egal an was man den Namen im Programmverlauf vorher schon mal gebunden hat. Du wunderst Dich also das nach
nicht
ausgegeben wird sondern ”nur”
Wenn Du eine Sequenz von Werten im Template haben möchtest, dann muss im Template ein Schleifenkonstrukt stehen, oder vielleicht auch ein Filter der eine Sequenz aus Zeichenketten eine einzige zusammensetzt.
Re: print andere Ausgabe als im Template
Verfasst: Donnerstag 5. Februar 2015, 16:09
von django-yip
BlackJack hat geschrieben:
ausgegeben wird sondern ”nur”
Ja, hast recht. Hab mich da vertan.
Wenn ich
Code: Alles auswählen
for datetime in queryset:
test1 = datetime.artikel_set.values_list('name', flat=True)
mache, erhalte ich zwar alles aber leider nur ziemlich dämlich formatiert.
[u'TEST1', u'TEST2', u'TEST3']
Re: print andere Ausgabe als im Template
Verfasst: Donnerstag 5. Februar 2015, 16:12
von django-yip
Ah habs jetzt
So, hab ich es bisschen schicker

Re: print andere Ausgabe als im Template
Verfasst: Donnerstag 5. Februar 2015, 16:14
von BlackJack
@django-yip: Wie es aussieht hast Du auch das gleiche Problem noch mal mit der noch vorhandenen Schleife, da ist am Ende `test1` an den Wert gebunden der im *letzten* Schleifendurchlauf ermittelt wird. Alles davor wird einfach verworfen.
Re: print andere Ausgabe als im Template
Verfasst: Donnerstag 5. Februar 2015, 17:07
von django-yip
BlackJack hat geschrieben:@django-yip: Wie es aussieht hast Du auch das gleiche Problem noch mal mit der noch vorhandenen Schleife, da ist am Ende `test1` an den Wert gebunden der im *letzten* Schleifendurchlauf ermittelt wird. Alles davor wird einfach verworfen.
Versteh ich nicht?!
Ich bekomme jetzt alle Werte die ich wollte. Oder was meinst genau?
Re: print andere Ausgabe als im Template
Verfasst: Donnerstag 5. Februar 2015, 19:51
von BlackJack
@django-yip: Ich weiss nicht was ich da noch zu sagen soll. Wenn Du verstanden hast wie Schleifen und Zuweisungen funktionieren sollte es sehr deutlich ersichtlich sein dass das verdammt falsch aussieht. Entweder es werden Ergebnisse verworfen oder die Schleife ist an der Stelle das falsche Sprachmittel. Oder man sollte dokumentieren das diese Schleife dazu da ist alle bis auf das letzte Element aus dem `queryset` zu verwerfen. Und vielleicht sollte man sich auch überlegen was passiert wenn das `queryset` leer ist.