Welchen Sinn macht eine Templateengine?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
chriss13
User
Beiträge: 3
Registriert: Dienstag 20. Januar 2009, 15:36

Welchen Sinn macht eine Templateengine?

Beitragvon chriss13 » Dienstag 20. Januar 2009, 15:52

Ich bin gerade am Erlernen von Python und möchte später was in Richtung Web mit Python machen.

Wie im Forum zu lesen ist benutzen eigentlich fast alle eine Templateengine. Jetzt stellt sich für mich nur die Frage. Warum?

Was ist der Riesenvorteil einer Templateengine? Immerhin muss auch sie erstmal erlernt werden.
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Beitragvon derdon » Dienstag 20. Januar 2009, 16:02

Trennung von Logik (Python) und Struktur (Template Engine + HTML). Nenne eine Alternative. Wie würdest du "Es" ohne Template Engine machen?
tordmor
User
Beiträge: 100
Registriert: Donnerstag 20. November 2008, 10:29
Wohnort: Stuttgart

Beitragvon tordmor » Dienstag 20. Januar 2009, 16:05

Das hat etwas damit zu tun, wie viel Code man bei einer Änderung anpassen muss. Größere Projekte werden gerne in Model, View und Controler getrennt, damit man jeden Teil getrennt voneinander entwerfen und implementieren kann. Eine Templateengine sorgt dafür, dass die Daten nicht schon bei der Bereitstellung in einer Form vorliegen müssen, wie sie später dargestellt werden, sondern zunächst so bereit gestellt werden können, wie es der Programmlogik entspricht. Erst die Templateengine bereitet dann die Daten so auf, wie sie in die konkrete HTML Seite eingefügt werden können. Auf diese Weise muss nichts an der dahinter liegenden Programmlogik verändert werden, wenn das Layout der Seite angepasst werden soll. So kann sich der Programmierer auf das Programm und der Designer auf das Design konzentrieren.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Beitragvon sma » Dienstag 20. Januar 2009, 17:56

Was liest sich besser?

Code: Alles auswählen

s = "<h2>User</h2>"
if users:
    s += "<ul>"
    for user in users:
        s += "<li>" + user.name + "</li>"
    s += "</ul>"
return s

oder

Code: Alles auswählen

<h2>Users</h2>
<ul tal:for="user in users">
  <li tal:content="user.name"/>
</ul>

oder

Code: Alles auswählen

:h2 Users
  :ul[for user in users]
    :li= user.name


Wenn du meinst, die erste Variante, dann brauchst du keine Template-Engine ;) Im Übrigen wäre die erste Variante mit dem Addieren von Strings viel ineffizienter und sollte besser eine out()-Methode o.ä. benutzen. Natürlich gibt es auch bei Template-Engines viele Freiheitsgrade und manchmal sehen die Ergebnisse auch nicht besser als Python-Code aus.

Stefan
chriss13
User
Beiträge: 3
Registriert: Dienstag 20. Januar 2009, 15:36

Beitragvon chriss13 » Mittwoch 21. Januar 2009, 00:35

Die beiden letzteren Varianten von sma wirken auf mich eleganter und übersichtlicher.

Mein grundsätzliches Verständnisproblem bleibt jedoch. Die eigentliche Trennung von Logik und Struktur kriegt man meineserachtens auch ohne TemplateEngine hin.

Und in der Ausgabe selbst ist eine Vermengung von 2 verschiedenen Sprachen wohl gar nicht umgehbar. Ob ich jetzt Python Code mit HTML mische oder Template Code mit HTML ist dann wohl eine Geschmacksfrage.

Nachdem was hier geschriebe wurde ist aus meiner Sicht der Grund eine Templateengine zu verwenden derjenige, das man auf Kosten eines erstmal zusätzlichen Lernaufwands später größtenteils kürzere und damit übersichtlichere Ausgabedateien hinbekommt. Kann man das so sagen?

Noch 3 Fragen habe ich:
Ist der Aufwand eine Templateengine zu erlernen groß? Und 2. was mache ich wenn meine Ausgabe doch mal etwas komplizierter sein soll. Wahrscheinlich muss ich dann doch wieder auf Python-Code ausweichen. Wie sieht es diesbezüglich in der Praxis aus?
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Mittwoch 21. Januar 2009, 00:53

chriss13 hat geschrieben:Mein grundsätzliches Verständnisproblem bleibt jedoch. Die eigentliche Trennung von Logik und Struktur kriegt man meineserachtens auch ohne TemplateEngine hin.

Beispielcode?

chriss13 hat geschrieben:Und in der Ausgabe selbst ist eine Vermengung von 2 verschiedenen Sprachen wohl gar nicht umgehbar. Ob ich jetzt Python Code mit HTML mische oder Template Code mit HTML ist dann wohl eine Geschmacksfrage.

Jein. Wenn ich den Leuten die bei uns in der Firma die Templetes schreiben Python-Code in den Templates vorlege, dann lehnen die ab, damit zu arbeiten. Kann ich auch irgendwieweit verstehen.

chriss13 hat geschrieben:Ist der Aufwand eine Templateengine zu erlernen groß? Und 2. was mache ich wenn meine Ausgabe doch mal etwas komplizierter sein soll. Wahrscheinlich muss ich dann doch wieder auf Python-Code ausweichen. Wie sieht es diesbezüglich in der Praxis aus?

Der Aufwand für die Templateengine ist unterschiedlich. Für Systeme wie TAL/Genshi braucht man länger, aber bei Django-Templates konnte ich nach 30 Minuten recht gut damit umgehen. Und was kompliziertere Sachen angeht, so bietet Jinja mehrere Ansatzpunkte an, an denen man Erweiterungen anbringen kann. Teilweise rendere ich einzelne Stücke (auch als Templates), die ich dann in einem anderen Template zum Endergebnis zusammensetze. Aber Bedarf Python-Code in den Templates zu verwenden habe ich eigentlich keinen.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7471
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Beitragvon Hyperion » Mittwoch 21. Januar 2009, 08:19

Wurde hier schon das Stichwort "inheritance" genannt? Imho auch ein massiver Vorteil von Templates. Man kann damit die HTML-Ausgaben sehr schön strukturieren und ggf. mit kleinen Änderungen am "Haupt"-Template der Seite einen ganz neuen Look geben, ohne alles andere anfassen zu müssen.
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Beitragvon Darii » Mittwoch 21. Januar 2009, 10:47

Leonidas hat geschrieben:
chriss13 hat geschrieben:Mein grundsätzliches Verständnisproblem bleibt jedoch. Die eigentliche Trennung von Logik und Struktur kriegt man meineserachtens auch ohne TemplateEngine hin.

Beispielcode?

Wo er Recht hat hat er Recht, man muss sich nur mehr aufpassen bei der Trennung. Siehe Tk, Gtk etc. da programmiert man die View meist auch direkt in Python. Kann man wenn man will aber trotzdem sauber trennen.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Mittwoch 21. Januar 2009, 11:02

Darii hat geschrieben:Siehe Tk, Gtk etc. da programmiert man die View meist auch direkt in Python.

Also bei GTK programmiert man die View oft gar nicht, da nutzt man Glade und ggf. PyGTK MVC.

Das es möglich ist kann schon sein, aber warum sich das Leben schwermachen? Daher wollte ich sehen wie er das mit Pythoncode machen würde.
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Beitragvon Darii » Mittwoch 21. Januar 2009, 11:39

Leonidas hat geschrieben:Also bei GTK programmiert man die View oft gar nicht, da nutzt man Glade und ggf. PyGTK MVC.
PyGTKMVC sieht ja sogar recht nett aus. Besonders das data binding.
chriss13
User
Beiträge: 3
Registriert: Dienstag 20. Januar 2009, 15:36

Beitragvon chriss13 » Donnerstag 22. Januar 2009, 09:28

Danke euch für die Antworten.

Macht wohl sinn sich mit einer Templateengine auseinanderzusetzen. Was könnt ihr mir empfehlen? Im Forum ist oft von Jinja die Rede.
lunar

Beitragvon lunar » Donnerstag 22. Januar 2009, 11:30

chriss13 hat geschrieben:Macht wohl sinn sich mit einer Templateengine auseinanderzusetzen. Was könnt ihr mir empfehlen? Im Forum ist oft von Jinja die Rede.

Jinja2 oder Mako.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Donnerstag 22. Januar 2009, 12:51

lunar hat geschrieben:
chriss13 hat geschrieben:Macht wohl sinn sich mit einer Templateengine auseinanderzusetzen. Was könnt ihr mir empfehlen? Im Forum ist oft von Jinja die Rede.

Jinja2 oder Mako.

Wenn man XML mag, dann ggf. noch Genshi.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Donnerstag 22. Januar 2009, 13:19

Hallo!

Und wenn man das "Geschwungene-Klammern-Gewitter" mancher Vorlagensprachen nicht mag, dann ist Cheetah http://www.cheetahtemplate.org/ keine schlechte Wahl. Meine Erfahrung damit: http://halvar.at/python/cherrypy_cheetah/

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Donnerstag 22. Januar 2009, 13:55

gerold hat geschrieben:"Geschwungene-Klammern-Gewitter"

Das ist in Jinja konfigurierbar, ich könnte dort auch Rauten nehmen. Was ich aber noch übler finde, YMMV.

Das es konfigurierbar ist finde ich persönlich wichtig, denn für TeX-Code brauche ich etwas anderes an geschweifte Klammern, da TeX auch geschweifte Klammern verwendet und dann alles unübersichtlich wird.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder