„Template-Engine“ – Versionsunterschied
[gesichtete Version] | [gesichtete Version] |
K Klammern korrigiert | Klammerfehler - Helfer gesucht |
, |
||
Zeile 93: | Zeile 93: | ||
=== Template-Engines für Python === |
=== Template-Engines für Python === |
||
Es gibt viele Template-Engines unter [[Python (Programmiersprache)|Python]]. Beispiele sind ''[[Django_(Framework)|Django]]'' oder ''TurboGears''. Eine gute Übersicht (mit URI und Code-Beispielen) findet man im deutschen PythonWiki<ref>[http://pythonwiki.pocoo.org/Template_Engines deutschen PythonWiki]</ref>. Eine umfangreichere Liste, dafür weniger erklärt findet man im englischen Wiki zu Python<ref>[http://wiki.python.org/moin/WebProgramming englischen Wiki zu Python]</ref>. Weitere sind Cheetah, SimpleTAL, pyTemple, pyratemp<ref>[http://www.simple-is-better.org/template/pyratemp.html pyratemp]</ref> und einige Python Template-Engines<ref>[http://www.simple-is-better.org/template/ Vergleich und Benchmarks: Python Template-Engines]</ref>, Spytee, Nevow, Kid, Genshi, Jinja und HTMLTemplate. |
Es gibt viele Template-Engines unter [[Python (Programmiersprache)|Python]]. Beispiele sind ''[[Django_(Framework)|Django]]'' oder ''TurboGears''. Eine gute Übersicht (mit URI und Code-Beispielen) findet man im deutschen PythonWiki<ref>[http://pythonwiki.pocoo.org/Template_Engines deutschen PythonWiki]</ref>. Eine umfangreichere Liste, dafür weniger erklärt, findet man im englischen Wiki zu Python<ref>[http://wiki.python.org/moin/WebProgramming englischen Wiki zu Python]</ref>. Weitere sind Cheetah, SimpleTAL, pyTemple, pyratemp<ref>[http://www.simple-is-better.org/template/pyratemp.html pyratemp]</ref> und einige Python Template-Engines<ref>[http://www.simple-is-better.org/template/ Vergleich und Benchmarks: Python Template-Engines]</ref>, Spytee, Nevow, Kid, Genshi, Jinja und HTMLTemplate. |
||
==== Anwendungsbeispiel ==== |
==== Anwendungsbeispiel ==== |
Version vom 31. Mai 2014, 00:18 Uhr
Eine Template-Engine (von engl. Vorlage und Maschine) ist eine Software, die eine Datei (das Template) verarbeitet, und bestimmte Platzhalter darin mit jeweils aktuellen Inhalten füllt. Die Bezeichnungen Templateklasse und Templatesystem werden oft als Synonym für eine Template-Engine verwendet.
Klassentemplates in der C++-Programmierung sind dagegen nicht mit Template-Engines vergleichbar, weil sie eine vom Datentyp unabhängige Programmierung ermöglichen und ganze Klassen enthalten. In den Templates einer Template-Engine sollte kein Programm-Code enthalten sein. Kontrollstrukturen (wie IF) sind allerdings oft in Templates möglich und verbreitet. Typische Dateitypen, die verarbeitet werden, sind HTML, Text (ASCII oder Unicode), XML oder TeX.
Konzept
Das Konzept ähnelt den Seriendruckfeldern bei einer Textverarbeitung: In einem Dokument werden Seriendruckfelder (Platzhalter) eingefügt, etwa Name – Straße – Ort. Bei Template-Engines werden diese Seriendruckfelder Templatevariablen genannt. Wenn aus dem Dokument dann mehrere Serienbriefe erzeugt werden, steht anstatt der Templatevariablen name ein realer Name wie „Erika Mustermann“ im fertigen Serienbrief.
Das Dokument muss nur einmal geschrieben und formatiert werden. Alle Änderungen wirken sich automatisch auf zukünftig erstellte Serienbriefe aus. Das ist bei Template-Engines genauso; weitere Parallelen zu Serienbrief-Vorlagen sind:
- Die Daten kommen aus einer externen Quelle (Datenbank, Tabellenkalkulation, etc.).
- Um die Daten zu ändern, muss das Template nicht verändert werden, und umgekehrt.
- Das Template kann wiederverwendet werden.
Abgrenzung
Template-Engines werden häufig von Programmierern eingesetzt, um im Kontext von Webanwendungen Programm-Code (einer Programmiersprache) vom Design zu trennen. Genauso wird von den Herstellern mancher Template-Engines angeführt, Templates und Engines sollen durch die Trennung der Programmierlogik vom Design das Skript von HTML-Code befreien und damit übersichtlicher machen.
Demgegenüber steht der ursprüngliche Gedanke der Template-Engines: Sie sollen statischen Text und dynamische Inhalte möglichst effizient miteinander verknüpfen. Oft sind Template-Engines deshalb gerade in Programmiersprachen anzutreffen, deren Syntax eine solche Mischung nicht direkt unterstützt (z. B. Java: JSP; VBScript u. a.: ASP). Für eine echte Trennung der Darstellung von den Datenmodellen und den Logikkomponenten sind Template-Engines dagegen ungeeignet und es sind zusätzliche Konzepte wie Model View Controller notwendig.
Vorteile
- Programm-Code (PHP, Python, Perl) wird vom Markup (HTML) getrennt.
- Designer und Programmierer können gleichzeitig an einem Projekt arbeiten.
- WYSIWYG-Editoren können verwendet werden.
Nachteile
Template-Engines
- Template-Engines erzeugen immer zusätzlichen Overhead.
- Template-Engines müssen im Gebrauch erlernt werden. Neben der neuen Syntax sind auch oft grundlegende Kenntnisse der objektorientierten Programmierung Voraussetzung.
- Template-Engines sind auf eine textuelle Ausgabe beschränkt.
Sprachabhängige Template-Engines
Die Masse von Template-Engines ist enorm. Eigenentwicklungen sind an der Tagesordnung. XSLT ist für alle Template-Engines eine Konkurrenz. Bei PHP ist Smarty weit verbreitet, hat aber die Eigenentwicklungen und andere Template-Engines nicht vom Markt verdrängt.
Template-Engines für PHP
PHP selbst ist bereits so entworfen, dass man programmiersprachliche Konstrukte mit der textuellen Ausgabe über Platzhalter bzw. gekennzeichnete Bereiche mischen kann.
<h1><?php echo $body_text; ?></h1>
<?php foreach($test_array as $key => $value) : ?>
<p>Schlüssel: <?php echo $key; ?> - Wert: <?php echo $value; ?></p>
<?php endforeach; ?>
Der Vorteil liegt in der einfachen Verwendung. Es muss keine zusätzliche Bibliothek installiert werden, auch ist diese Vorgehensweise für PHP-erfahrene Entwickler am leichtesten zu verstehen und folgt dem Prinzip der geringsten Überraschung. Die Verwendung einer gesonderten Template-Engine für PHP ist daher nicht erforderlich. Dennoch existieren besonders für PHP eine sehr große Zahl von Engines.
- Smarty[1]
- Twig[2]
- Fluid (als Teil von TYPO3 Flow)[3]
- vlibTemplate[4]
- TinyButStrong[5]
- Contemplate[6]
- ETS (Easy Template System)[7]
- t24 - PHP template parser[8]
- HTML_Template_IT: HTML Integrated Templates, PEAR-PackageuBook Template[9]
- uBook Template[10]
- KTemplate[11]
- Hyperkit PHP/XML Template-Engine[12]
- Beilpuz[13]
- Separate[14]
Beispiel
Um eine Template-Engine zu verwenden, benötigt man die Template-Datei (in der die auszugebenen Daten enthalten sind) sowie das Script, welches das Template lädt und die Platzhalter mit Werten füllt.
Das Template könnte so aussehen:
<body>
<p>Hallo, {name}!</p>
</body>
Und so könnte eine Wertzuweisung vom Script aus aussehen:
$template->assign('name', 'Erika Mustermann');
Das Ergebnis:
<body>
<p>Hallo, Erika Mustermann!</p>
</body>
Template-Engines für Perl
- Template Toolkit[15]
- Contemplate[16] (auch ASP)
- Embperl[17]
- Mason[18]
- HTML Template[19]
- Text Template[20]
- HTML CTPP2[21]
Template-Engines für Python
Es gibt viele Template-Engines unter Python. Beispiele sind Django oder TurboGears. Eine gute Übersicht (mit URI und Code-Beispielen) findet man im deutschen PythonWiki[22]. Eine umfangreichere Liste, dafür weniger erklärt, findet man im englischen Wiki zu Python[23]. Weitere sind Cheetah, SimpleTAL, pyTemple, pyratemp[24] und einige Python Template-Engines[25], Spytee, Nevow, Kid, Genshi, Jinja und HTMLTemplate.
Anwendungsbeispiel
# -*- coding: utf-8 -*-
# Modul Template muss importiert werden
from string import Template
# Vorlage zum Lesen öffnen, Inhalt übergeben und Datei schließen
vorlage = open('vorlage.txt', 'r')
vorl_inhalt = vorlage.read()
vorlage.close()
# Den Inhalt als Template behandeln
template = Template(vorl_inhalt)
# Ersetzungen nach folgendem Schema festlegen
ersetzungen = { 'Name' : 'Hans Meier', 'Strasse' : 'Bahnhofstr. 69', 'Ort' : '12345 Foobarhausen' }
# Ersetzungen vornehmen
ersetzen = template.substitute(ersetzungen)
# Vorgang in Datei schreiben
outfile = open('ausgabe.txt', 'w')
outfile.write(ersetzen)
outfile.close()
vorlage.txt:
Name: ${Name}
Strasse: ${Strasse}
Ort: ${Ort}
ausgabe.txt:
Name: Hans Meier
Strasse: Bahnhofstr. 69
Ort: 12345 Foobarhausen
Template-Engines für C++ und C
Für C++ und C gibt es verschiedene Template-Engines, wie
- ClearSilver[26] Die Template-Engine von Orkut und Yahoo Groups (setzen einen eigenen Branch ein).
- Grantlee Template System[27]
- Google CTemplate[28]
Template-Engines für Java
Einige Template-Engines für Java[29] sind java-basierte Template-Engines, welche unter einer OpenSource Lizenz zugänglich sind.
- FreeMarker – Java-basierte Template-Engine[30]
- Apache Velocity – Java-basierte Template-Engine
- Apache Tapestry - Java-basierte Template-Engine[31]
Weitere Informationen zu Template-Engines
Weitere Template-Engines sind mitunter java-basiert.
- Hamlets – Java-basierte Template-Engine
- action4JAVA[32] - Java-basiertes Framework mit Template-Kern.
- jade4j – Java-basierte, freie Implementierung der Jade Template-Engine[33]
- XSLTengine - Java-basierte Template-Engine, insbesondere für Web-Entwickler[34]
- Xpand – Java-basierte Template-Engine für die Codegenerierung[35]
- ASP[36]
- CTPP, Crossplatform Template-Engine für C++, C, PERL und PHP[37]
- GvTags Template-Engine für Groovy[38]
- jQote2 - jQuery Javascript Templating Engine[39]
- FilesFromCSV - .NET basiert - erzeugt pro CSV Datensatz ein Dokument[40]
Literatur
- Karsten Wendland: Der Template-Zyklus. Web-Templates im Spannungsfeld von schöpferischem Gestalten und einschränkender Zumutung. Aachen 2006, ISBN 3-8322-5285-1.
Einzelnachweise
- ↑ Smarty extern
- ↑ Twig
- ↑ (extern)
- ↑ vLIB: vlibTemplate, vlibDate und vlibMimeMail (englisch, deutsch)
- ↑ TinyButStrong
- ↑ Contemplate
- ↑ ETS (Easy Template System)
- ↑ t24 - PHP template parser
- ↑ HTML_Template_IT: HTML Integrated Templates, PEAR-Package
- ↑ uBook Template
- ↑ KTemplate
- ↑ Hyperkit PHP/XML Template-Engine
- ↑ Beilpuz
- ↑ Separate
- ↑ Template Toolkit
- ↑ Contemplate
- ↑ Embperl
- ↑ Mason
- ↑ HTML Template
- ↑ Text Template
- ↑ HTML CTPP2
- ↑ deutschen PythonWiki
- ↑ englischen Wiki zu Python
- ↑ pyratemp
- ↑ Vergleich und Benchmarks: Python Template-Engines
- ↑ ClearSilver
- ↑ Grantlee Template System
- ↑ Projektübersicht zu Google CTemplate bei Google Code
- ↑ Java-Source.net - Open Source Template Engines in Java
- ↑ Freemarker website
- ↑ Tapestry website
- ↑ action4JAVA
- ↑ jade4j Bezugsquelle
- ↑ XSLTengine website
- ↑ oAW website
- ↑ Contemplate (englisch)
- ↑ CTPP
- ↑ GvTags Template-Engine für Groovy
- ↑ jQote2
- ↑ FilesFromCSV