Seite 1 von 1

jinja2: Daten an Template übergeben

Verfasst: Donnerstag 27. September 2012, 15:42
von marlob
Hallo,

ich habe ein Script wo ich Daten an jinja2 übergeben will. Ich benutze python 2.7 auf Windows 7

Folgendes Problem.
Ich habe ein Dictionary:

Code: Alles auswählen

template_variables = {'source2': [{'Roboter': u'Rob2', 'Zone': u'WT1'}, {'Roboter': u'Rob2', 'Zone': u'WT2'}], 'source1': [{'Roboter': u'Rob1', 'Ablegen': u'WT1'}, {'Roboter': u'Rob1', 'Ablegen': u'WT2'}]}
Dieses möchte ich an die render Methode von jinja2 übergeben

Wenn ich folgendes programmiere:

Code: Alles auswählen

import jinja2
loader = jinja2.FileSystemLoader(template_dir)
j2_env = jinja2.Environment(loader=loader)
print j2_env.get_template(template_file).render(source1=template_variables['source1'], source2=template_variables['source2'])
funktioniert das ganze gut.
Ich habe aber unterschiedlich grosse Dictionarys. Es kann also noch ein source3, source4 usw. bis sourceN geben.
wir übergebe ich das an die render Methode?

Code: Alles auswählen

print j2_env.get_template(template_file).render(items=template_variables)
funktioniert jedenfalls nicht

Re: jinja2: Daten an Template übergeben

Verfasst: Donnerstag 27. September 2012, 17:32
von Hyperion
Ganz einfach: Übergib einfach das Dictionary und nicht die Listenkomponenten aus dem Dictionary ;-)

Bist Du Dir eigentlich sicher, dass Du da ein Dictionary brauchst? Deine Keys scheinen ja nummeriert zu sein - da kannst Du dann besser direkt eine Liste nehmen.

Re: jinja2: Daten an Template übergeben

Verfasst: Donnerstag 27. September 2012, 17:53
von marlob
Das Dictionary template_variables ist stark vereinfacht.
Ich lese Daten aus verschiedenen Quellen. source1 kann z.B. aus Sheet1 einer Exceldatei stammen, source2 aus einer Datenbank usw.
Alle Resultate aus den verschiedenen Quellen kommen dann in das Dictionary template_variables.
Und alle Daten will ich an das Template übergeben
Wenn ich aber das Dictionary direkt übergebe dann bekomme ich eine Fehlermeldung.
Bin momentan nicht vor meinem Rechner wo ich das programmiert habe.
Ich poste morgen mal die Fehlermeldung.

Re: jinja2: Daten an Template übergeben

Verfasst: Donnerstag 27. September 2012, 18:53
von Hyperion
marlob hat geschrieben: Ich lese Daten aus verschiedenen Quellen. source1 kann z.B. aus Sheet1 einer Exceldatei stammen, source2 aus einer Datenbank usw.
Alle Resultate aus den verschiedenen Quellen kommen dann in das Dictionary template_variables.
Mit anderen Worten in echt heißen die Schlüssel nicht ``source1`` und ``source2`` usw, sondern sind komplett verschieden?
marlob hat geschrieben: Wenn ich aber das Dictionary direkt übergebe dann bekomme ich eine Fehlermeldung.
Bin momentan nicht vor meinem Rechner wo ich das programmiert habe.
Ich poste morgen mal die Fehlermeldung.
Das mach mal. Ohne Fehlermeldung kann man schwerlich etwas dazu sagen!

Im übrigen hättest Du das doch schon mal direkt erwähnen können, dass Du das schon ausprobiert hattest. Bei Deiner Frage hätte Dir doch klar sein müssen, dass der von mir gegebene Tipp hier sofort kommt...

Re: jinja2: Daten an Template übergeben

Verfasst: Donnerstag 27. September 2012, 20:08
von marlob
Hyperion hat geschrieben: Mit anderen Worten in echt heißen die Schlüssel nicht ``source1`` und ``source2`` usw, sondern sind komplett verschieden?
Genau, das können beliebige Namen sein.
Hyperion hat geschrieben: Im übrigen hättest Du das doch schon mal direkt erwähnen können, dass Du das schon ausprobiert hattest. Bei Deiner Frage hätte Dir doch klar sein müssen, dass der von mir gegebene Tipp hier sofort kommt...
Hatte ich im ersten Beitrag erwähnt, das das nicht funktioniert :wink:

Ich hatte auch schon ein Minimalbeispiel zusammengepackt, konnte aber nicht so schnell finden wo ich Dateien hochlade und das auf später verschoben weil ich einen Termin hatte. Werde ich morgen nachholen, wenn ich wieder vorm richtigen Rechner sitze.

Bis dahin schon mal Danke für die Hilfe :)

Re: jinja2: Daten an Template übergeben

Verfasst: Freitag 28. September 2012, 06:42
von marlob
Hallo,

habe den Fehler gefunden. Ich hatte, wie Hyperion schon richtig vorgeschlagen hat, das ganze Dictionary übergeben.
Leider hatte ich vergessen mein Template anzupassen, so das eine Fehlermeldung erzeugt wurde.
Diese habe ich fälschlicherweise in meinem Script gesucht und nicht im Template.
Also das ganze Dictionary zu übergeben funktioniert jedenfalls.
Nochmals danke für die Hilfe :D

Re: jinja2: Daten an Template übergeben

Verfasst: Freitag 28. September 2012, 06:51
von marlob
So rein interessehalber. Kann ich eine Funktion IrgendeineFunktion() programmieren, so das ich folgendes programmieren kann:

Code: Alles auswählen

print j2_env.get_template(template_file).render(IrgendeineFunktion(template_variables))
mit folgendenm Dictionary

Code: Alles auswählen

template_variables = {'source2': [{'Roboter': u'Rob2', 'Zone': u'WT1'}, {'Roboter': u'Rob2', 'Zone': u'WT2'}], 'source1': [{'Roboter': u'Rob1', 'Ablegen': u'WT1'}, {'Roboter': u'Rob1', 'Ablegen': u'WT2'}]}
und es wird folgendes erzeugt

Code: Alles auswählen

print j2_env.get_template(template_file).render(source1=template_variables['source1'], source2=template_variables['source2'])
Also IrgendeineFunktion(template_variables) erzeugt mir dann

Code: Alles auswählen

source1=template_variables['source1'], source2=template_variables['source2']

Re: jinja2: Daten an Template übergeben

Verfasst: Freitag 28. September 2012, 07:17
von Sr4l
marlob hat geschrieben:So rein interessehalber. Kann ich eine Funktion IrgendeineFunktion() programmieren, so das ich folgendes programmieren kann:

Code: Alles auswählen

print j2_env.get_template(template_file).render(IrgendeineFunktion(template_variables))
für genau das von dir gewünschte Verhalten gibt es etwas
ist das in deinem Python Tutorial nicht vorgekommen? :-)

Code: Alles auswählen

print j2_env.get_template(template_file).render(**template_variables)

Re: jinja2: Daten an Template übergeben

Verfasst: Freitag 28. September 2012, 07:36
von marlob
Sr4l hat geschrieben: für genau das von dir gewünschte Verhalten gibt es etwas
ist das in deinem Python Tutorial nicht vorgekommen? :-)

Code: Alles auswählen

print j2_env.get_template(template_file).render(**template_variables)
Danke für die Lösung :) Funktioniert genauso wie ich das möchte!

P.S.
leider kann man sich nicht alles aus dem Tutorial merken und ich benutze Python auch nicht hauptberuflich und regelmässig sondern nebenbei alle paar Monate bei Bedarf. :D
Und hier hat auch der ein oder andere Erfahrene schon Fragen gestellt die das Tutorial beantwortet. Du vielleicht auch schon :wink:
Der Smiley dahinter ist hoffentlich gut sichtbar :D Also nichts für ungut und nochmal Danke!