Die Template Attribute Language Expression Syntax (TALES) beschreibt die Syntax für die Auswertung der von der Template Attribute Language (TAL) und Macro Expansion Template Attribute Language (METAL) für Attributwerte verwendeten Ausdrücke. Die Möglichkeit, hierfür eine andere Syntax als TALES zu verwenden, ist ausdrücklich vorgesehen; in der Regel wird TALES jedoch nicht ersetzt, sondern erweitert.
Der Webanwendungsserver Zope erweitert die TALES-Spezifikation im Rahmen der Zope Page Templates.
TALES stellt mehrere Methoden zur Verfügung, Ausdrücke zu formulieren, die in TAL- und METAL-Attributen verwendet werden können und durch ein (optionales) Präfix unterschieden werden:
path: (optional, und deshalb fast immer fortgelassen): zum Zugriff auf strukturierte Variablen, Dateisystemobjekte, Makros (METAL) usw.string:; erlaubt Pfadausdrücke in ${...}not:; wertet den restlichen Ausdruck aus und gibt seine logische Negation zurückpython:; wenn implementiert, gibt den Wert des folgenden Python-Ausdrucks zurück. Dies findet üblicherweise nur Anwendung, wenn Pfadausdrücke nicht ausreichen, z. B. wenn eine Funktion mit bestimmten Argumenten aufgerufen werden muss.structure (ohne Doppelpunkt) unterdrückt das sonst automatisch angewendete HTML-Quoting, um beispielsweise ein komplettes HTML-Element zu erzeugen.Diese Namen werden üblicherweise noch um weitere ergänzt, siehe Zope Page Templates.
<metal:form use-macro="location/page/MACROS/myform"/>
Hier sei beispielsweise location das Verzeichnis, das eine Vorlagendatei page enthält, in der wiederum das Makro myform definiert wurde. In Zope Page Templates würde hier anstelle von location z. B. here (als Ausgangspunkt der Akquisition zur Suche nach page) oder container stehen.
<tr tal:repeat="item python:({'key': 'eins'}, {'key': 'zwei'})"> <td tal:content="repeat/item/number">99</td> <td tal:content="string:Zeile ${item/key}">Zeile 99</td> </tr>
Ausgabe:
<tr> <td>1</td> <td>Zeile eins</td> </tr> <tr> <td>2</td> <td>Zeile zwei</td> </tr>
Erläuterungen:
tal:repeat-Attribut erzeugt eine Variable item und, mit Hilfe des Python-Ausdrucks, eine Sequenz von Dictionarys, die verwendet wird, um mehrere HTML-Tabellenzeilen zu erzeugenitem werden über die spezielle, vom TALES-Standard geforderte Variable repeat zur Verfügung gestellt<div tal:define="view_ok context/is_view_ok"> <tal:if condition="view_ok"> ... </tal:if> <tal:else condition="not:view_ok"> ... </tal:else> </div>
is_view_ok könnte hier eine Methode sein, die aus dem context aufgerufen wird und die Leseberechtigung des Benutzers überprüft. Im „Else-Zweig“ (der syntaktisch nichts anderes ist als der „If-Zweig“; if und else sind hier frei gewählte Namen, die sogar hätten gleich sein dürfen) wird die logische Bedingung des If-Zweigs umgekehrt, sodass nur einer der beiden ausgeführt wird.