Dynamische Templates mit Jinja2

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Dienstag 13. Januar 2009, 22:15

Hallo zusammen,

ich stehe vor dem Problem dynamische HTML-Seiten zu erzeugen. Dafür wollte ich jinja2 verwenden, da ich damit (bzw. dem Vorgänger) schon ein wenig Erfahrung hatte.

Was wäre damit denn ein gutes Vorgehen, wenn nicht nur die Inhalte, sondern auch Teile des Templates dynamisch wären? Um das Problem zu verdeutlichen wähle ich mal folgendes Beispiel:

Man stelle sich eine Art CMS vor, bei dem "Artikel", "News"-Beiträge, spezielle "Module" wie etwa eine Linksammlung u.ä. gibt. Nun sollen auf einer Seite z.B. erst ein Artikel, dann drei News-Einträge und dann noch einige Links angezeigt werden. Dabei kommen also unterschiedliche Datenobjekte zum tragen, die in einer beliebigen (konfigurierbaren) Reihenfolge angezeigt werden sollen.

Natürlich könnte man genau dafür ein Template anlegen, welches genau das nacheinander ermöglicht. Aber damit verliert man ja enorm an Flexibilität! Man müßte ja dann für jede denkbare Variante ein solches Template anlegen - ergo keine wirkliche Lösung!

Ich habe mir nun zunächst folgendes überlegt: Man erstellt einfach Macros, die sich um die Darstellung eben eines solchen Moduls kümmern. Zuerst generiert man nun eben abhängig von den "Inhaltsobjekten" Templates und merkt sich diese als Strings in einer Liste. Anschließend könnte man dann ein "großes" Master-Template rendern, dem man dann nur noch die Liste von Strings übergibt und diese stumpf in das Template eingebaut werden. Das wäre imho eine Lösung für das Problem.

Eine andere Idee von mir ist es, die Entscheidung welches Macro ausgeführt wird in ein jinja Template zu verlagern. Dabei wird abhängig von der Art / des Typs des Objektes entschieden, welches Macro ausgeführt werden soll. Ich habe allerdings nichts wie "type(obj)" o.ä. in jinja2 gefunden. Meine Frage wäre also, ob das so überhaupt realisierbar wäre.

Generell würde ich gerne wissen, ob eine meiner Ideen so sinnvoll ist! Wenn ja, welche, wenn nein, was für Alternativen gibt es für dieses Problem? Ich habe ja tief im Innern das Gefühl eine banale Lösung übersehen zu haben (wie so oft ;-)) - aber im Moment würde ich an dieser Stelle wirklich gerne den Rat von erfahrenen Leute hier im Board haben, bevor ich mich irgend wo rein verenne!
Antworten