Template Engines

Bei allen Webseiten, die automatisch von Scripts generiert werden, sollten Templates verwendet werden. Zu "kleine" Projekte gibt es dabei meiner Erfahrung nach eigentlich nicht. Meist empfiehlt sich auch der Einsatz von erprobten Template-Engines, die einfach bugfrei sind und mehr Features haben, auch wenn es meist sehr einfach ist, sich etwas Eigenes zu schreiben.

Generell kann man zwei Klassen von Template-Engines unterscheiden. Eine interessante Diskussion darüber fand im Juni 2004 in comp.lang.python statt (archiviert durch Google).

Ersetzungssysteme

Viele weit verbreitete Template-Toolkits ersetzen im Wesentlichen nur Variablen mit speziellen Werten. Die besseren Template-Systeme treffen keine Annahmen über die Struktur der Dokumente und können beliebige Textformate wie z.B. XML, LaTeX u.ä. ausgeben.

Die Template-Systeme definieren eine eigene Meta-Syntax, um Werte an den entsprechenden Stellen einzusetzen. Außerdem gibt es häufig mehr oder weniger ausgefeilte Features, um z.B. über Listen zu iterieren. Zum Teil gibt es Plugin-Mechanismen, um Daten aus verschiedenen Quellen wie Datenbanken darzustellen. Dadurch wird immer mehr Logik wieder zurück in die Templates verlagert.

Insgesamt sind Ersetzungssysteme einfach zu verstehen und sehr beliebt, haben manchmal aber auch die Eigenschaft, die gewünschte Trennung von Markup, Präsentations- und Applikationslogik wieder aufzuweichen.

Beispiele für Ersetzungssysteme:

DOM-basierte Systeme

Sollen nur XML-Dokumente mit DOM-Struktur generiert werden (XHTML etc), bieten sich auch DOM-basierte Systeme an, die meist noch komfortabler zu benutzen sind und das Markup noch klarer vom Rest (Applikations- und Präsentationslogik) trennen.

Soweit ich weiß, sind diese Art von Systemen nicht für beliebige Textdateien geeignet (wie z.B. Konfigurationsdateien). Andererseits sind die Templates völlig frei von jeder Art Präsentationslogik (z.B. Schleifen) und können damit von allen Designern mit ihren Webeditoren bearbeitet werden. Der Ansatz gegenüber den Ersetzungssystemen ist jedoch ein anderer, so dass viele Programmierer umdenken müssen.