![]() ![]() |
Sie sind hier: ZWikiSeiten > ZBAppendixC Zopebuch: Inhaltsverzeichnis Anhang C: Zope-Page-Templates-ReferenzZope-Seitenvorlagen (Zope Page Templates) sind ein Werkzeug zur HTML/XML-Erzeugung. Dieser Anhang ist eine Referenz für die Zope-Seitenvorlagen-Standards: die Tag Attribute Language (TAL), die TAL Expression Syntax (TALES) und die Macro Expansion TAL (METAL). TAL-ÜberblickDer Standard Template Attribute Language (TAL) ist eine Attributsprache für das Erzeugen dynamischer Vorlagen. Er ermöglicht es, die Elemente eines Dokuments zu ersetzen, sie zu wiederholen, oder sie wegzulassen. Die Anweisungen von TAL sind XML-Attribute aus dem TAL-Namensraum. Diese Attribute können auf ein XML- oder HTML-Document angewendet werden, um daraus eine Vorlage zu machen. Eine TAL-Anweisung hat einen Namen (den Attributnamen) und einen Körper (den Attributwert). Zum Beispiel könnte eine TAL-NamensraumDer URI des TAL-Namensraums und das empfohlene Namensraumkürzel sind zur Zeit definiert als: xmlns:tal="http://xml.zope.org/namespaces/tal" Dies ist kein URL, sondern lediglich ein eindeutiger Bezeichner. Erwarten Sie nicht, dass ein Browser ihn erfolgreich auflösen kann. Zope benötigt keine Deklaration eines XML-Namensraums beim Erstellen von Vorlagen mit dem Inhaltstyp TAL-AnweisungenDies sind die TAL-Anweisungen:
In Anweisungen verwendete Ausdrücke können Werte beliebigen Typs zurückgeben, auch wenn die meisten Anweisungen nur Zeichenketten akzeptieren oder die Werte in eine Zeichenketten-Darstellung überführen. Die Ausdruckssprache muss einen Wert namens nothing definieren, der keine Zeichenkette ist. Dieser Wert ist vor allem nützlich für das Löschen von Elementen und Attributen. AnweisungsreihenfolgeWenn nur ein TAL-Anweisung pro Element vorhanden ist, ist die Reihenfolgein der sie ausgeführt werden einfach. Beginnend mit dem Wurzelelement werden die Anweisungen jedes Elements ausgeführt. Danach werden alle seine Kinderknoten besucht um das selbe zu tun. In gleichen Elementen kann jede Kombination von Anweisungen auftreten, außer dass die Anweisungen Falls ein Element mehrere Anweisungen besitzt werden sie in dieser Reihenfolge ausgeführt:
Da die Anweisung Die Überlegung, die hinter dieser Reihenfolge steht ist folgende: Man möchte oft Variablen festlegen, die in anderen Anweisungen verwendet werden, also kommt Siehe auchTALES-Überblick METAL-Überblick tal:attributes tal:define tal:condition tal:content tal:omit-tag tal:on-error tal:repeat tal:replace attributes: Elementattribute ersetzenSyntax
argument ::= attribut_anweisung [';' attribut_anweisung]* attribut_anweisung ::= attribut_name ausdruck attribut_name ::= [namensraum ':'] Name namensraum ::= Name Hinweis: Wenn Sie einen Strichpunkt (;) in einem BeschreibungDie Anweisung Wenn der mit einer Attributzuweisung verknüpfte Ausdruck nothing ergibt, dann wird das Attribut aus dem Audrucks-Element gelöscht. Wenn der Ausdruck default ergibt, dann bleibt das Attribut unverändert. Alle Attributzuweisungen sind unabhängig voneinander. So können Attribute in derselben Anweisung zugewiesen werdne, in der andere Attribute gelöscht werden oder andere belassen werden. Wenn man Wenn man BeispieleEinen Verweis ersetzen: Zwei Attribute ersetzen: condition: ein Element bedingt einfügen oder entfernenSyntax
argument ::= ausdruck BeschreibungDie Anweisung Hinweis: Zope betrachtet fehlende Variablen, None, Null, leere Zeichenketten und leere Folgen als unwahr. Alle anderen Werte sind wahr. BeispieleEine Variable überprüfen, bevor sie eingfügt wird (das erste Beispiel prüft auf Existenz und Wahrheit, während das zweite nur auf Existenz prüft):
Auf wechselseitige Bedingungen prüfen:
content: den Inhalt eines Elements ersetzenSyntax
argument ::= (['text'] | 'structure') ausdruck BeschreibungUm nicht ein komplettes Element ersetzen zu müssen, kann man Text oder Strukturen anstatt der Unterelemente mit der Anweisung Hinweis: Das Standard-Ersetzungsverhalten ist BeispieleDen Benutzernamen einfügen:
HTML/XML einfügen:
Siehe auch
define: Variablen definierenSyntax
argument ::= define_bereich [';' define_bereich]* define_bereich ::= (['local'] | 'global') define_var define_var ::= variablenname ausdruck variablenname ::= Name Hinweis: Wenn Sie einen Strichpunkt (;) in einem BeschreibungDie Anweisung Hinweis: Standardmäßig werden lokale Variablen verwendet Wenn der mit einer Variable verbundene Ausdruck nothing ergibt, hat die Variable den Wert nothing und darf als solcher in weiteren Ausdrücken verwendet werden. Wenn der Ausdruck default ergibt, hat die Variable ebenso den Wert default und darf ebenso als solcher in weiteren Ausdrücken verwendet werden. BeispieleEine globale Variable definieren: tal:define="global fimenname string:Zope Corp, Inc." Zwei Variablen definieren, wobei die zweite von der ersten abhängt: tal:define="meintitel template/title; tlaenge python:len(meintitel)" omit-tag: ein Element entfernen, nicht jedoch dessen InhaltSyntax
argument ::= [ ausdruck ] BeschreibungDie Anweisung Wenn sein Ausdruck false ergibt, wird mit der normalen Verarbeitung des Tags fortgefahren, ohne dass das Tag weggelassen wird. Ergibt sein Ausdruck einen wahren Wert (true) oder es gibt keinen Ausruck, wird das Anweisungs-Tag durch seinen Inhalt ersetzt. Zope behandelt leere Zeichenketten, leere Sequenzen, eine Null, None, nothing und default als unwahr (false). Alle anderen Werte werden als wahr (true) erachtet. BeispieleWeglassen eines Tags ohne Bedingung:
Weglassen eines Tags mit Bedingung: Ich darf fettgedruckt sein. Das obige Beispiel wird das Tag Zehn Absatz-Tags (
on-error: Fehler behandelnSyntax
argument ::= (['text'] | 'structure') ausdruck BeschreibungDie Anweisung Eine lokale Variable,
Die einfachste Art einer BeispieleEinfache Fehlermeldung: Ishmael Elemente bei Fehlern entfernen: Ishmael Ein Skript zur Fehlerbehandlung aufrufen:
So könnte ein Fehlerbehandlungsskript aussehen: ## Script (Python) "fehlerBehandlung" ##bind namespace=_ ## fehler=_['error'] if fehler.type==ZeroDivisionError: return " Siehe auchPython Tutorial: Errors and Exceptions repeat: ein Element wiederholenSyntax
argument ::= variablenname ausdruck variablenname ::= Name BeschreibungDie Anweisung
WiederholungsvariablenWiederholungsvariablen verwendet man, um auf Informationen über den aktuellen Wiederholungsdurchgang (wie den Wiederholdungsindex) zuzugreifen. Die Wiederholungsvariable hat den selben Namen wie die lokale Variable, ist aber nur über die feste Variable Die folgenden Informationen sind über die Wiederholungsvariable verfügbar:
Sie können auf den den Inhalt der Wiederholungsvariable mit Pfadausdrücken oder Python-Ausrücken zugreifen. In Pfadausrücken schreiben Sie einen dreiteiligen Pfad bestehend aus dem Namen Beachten Sie, dass BeispieleÜber eine Sequenz von Zeichenketten iterieren:
Einfügen einer Reihe von Tabellenzeilen und verwenden der Wiederholungsvariablen um die Zeilen zu nummerieren:
Verschachtelte Wiederholungen:
Objekte einfügen. Teilt Objekte anhand des Metatyps in Gruppen ein, indem es eine Linie dazwischen setzt:
Beachten Sie, dass die Objekte im obigen Beispiel bereits nach dem Metatyp sortiert sein sollten. replace: ein Element ersetzenSyntax
argument ::= (['text'] | 'structure') ausdruck BeschreibungDie Anweisung Wenn der Wert nothing ist, wird das Element einfach entfernt. Wenn der Wert default ist, bleibt das Element unverändert. BeispieleZwei Arten den Titel einer Vorlage einzufügen: Titel Titel HTML/XML einfügen: Nichts einfügen:
Siehe auch
TALES-ÜberblickDer Standard Template Attribute Language Expression Syntax (TALES) beschreibt Ausdrücke die TAL und METAL Daten liefern. TALES ist eine mögliche Ausdruckssyntax für diese Sprachen, sie sind jedoch nicht an diese Definition gebunden. Ebenso könnte TALES in Situationen verwendet werden, in denen es nicht mit TAL oder METAL in Berührung kommt. TALES-Ausdrücke werden weiter unten ohne jegliches Trennsymbol oder Anführungszeichen-Code aus höhergelegenen Sprachebenen beschrieben. Hier ist die grundlegende Definition der TALES-Syntax: Ausdruck ::= [typpraefix ':'] Zeichenkette typpraefix ::= Name Hier sind einige einfache Beispiele: a/b/c path:a/b/c nothing path:nothing python: 1 + 2 string:Hallo ${user/getUserName} Das optionale Typpräfix legt die Semantik und Syntax der nachfolgenden Ausdruckszeichenkette fest. Eine TALES-Implementation kann eine beliebige Zahl von Asudruckstypen definieren, mit jedweder Syntax. Sie legt auch fest, welcher Ausruckstyp beim Weglassen des Präfixes verwendet wird. Wenn man kein Präfix angibt, nimmt Zope an, dass es sich um einen path-Ausdruck handelt. TALES-AusdruckstypenDies sind die von Zope unterstüzten TALES-Ausdruckstypen:
Feststehende NamenDies sind die Namen die TALES-Ausdrücken in Zope ständig zur Verfügung stehen:
Beachten Sie, dass die Namen Siehe auchTAL-Überblick METAL-Überblick exists-Ausdrücke nocall-Ausdrücke not-Ausdrücke string-Ausdrücke path-Ausdrücke python-Ausdrücke TALES-Exists-AusdrückeSyntaxSyntax des Ausdrucks Exists: exists-ausdruck ::= 'exists:' path-ausdruck BeschreibungExists-Ausdrücke überprüfen die Existenz von Pfaden. Ein Exists-Ausdruck gibt true zurück, wenn die auf ihn folgenden Path-Ausdrücke einen Wert liefern. Er ist false, wenn der Path-Ausdruck kein Objekt finden kann. BeispieleÜberprüfung der Existenz einer Fomularvariable:
Beachten Sie, dass Sie in diesem Fall den Ausdruck TALES-Nocall-AusdrückeSyntaxSyntax des Ausdrucks Nocall: nocall-ausdruck ::= 'nocall:' path-ausdruck BeschreibungNocall-Ausdrücke verhindern die Interpretation der Ergebnisse eines Path-Ausdrucks. Ein gewöhnlicher Path-Ausdruck versucht das Objekt, das er liefert zu interpretieren (rendern). Das bedeutet, dass, wenn das Objekt eine Funktion, ein Skript, eine Methode oder etwas anderes ausführbares ist, der Ausdruck zum Ergebnis des aufgerufenen Objekts wird. Dies will man normalerweise auch, aber nicht immer. Wenn man zum Beispiel ein DTML-Dokument in einer Variable speichern will, um dessen Eigenschaften ansprechen zu können, kann man keinen normalen Path-Ausdruck verwenden, weil es das Dokument in eine Zeichenkette umwandelt. BeispieleVerwendung von Nocall, um die Eigenschaften eines Dokument zu erhalten:
Id: Titel
Verwendung von Nocall bei einer Funktion: Dieses Beipiel definiert eine Variable TALES-Not-AusdrückeSyntaxSyntax des Ausdrucks Not: not-ausdruck ::= 'not:' ausdruck BeschreibungNot-Ausdrücke berechnen die Ausdruckszeichenkette (rekursiv) als kompletten Ausdruck und geben die boolesche Negation von dessen Wert zurück. Wenn der übergebene Ausdruck keinen booleschen Wert ergibt, gibt not eine Warnung und zwingt den Wert des Ausdrucks basierend auf den folgenden Regeln in einen booleschen Typ:
Wenn keine Ausdruckszeichenkette übergeben wird, sollte ein Fehler erzeugt werden. Zope betrachtet alle Objekte, die nicht explizit oben als false aufgelistet wurden (einschließlich negativer Zahlen) als true. BeispieleTesten einer Folge:
TALES-Path-AusdrückeSyntaxSyntax des Path-Ausdrucks: PathAusdr ::= Pfad [ '|' Pfad ]* Pfad ::= Variable [ '/' URL-Segment ]* Variable ::= Name BeschreibungEin Path-Ausdruck besteht aus einem oder mehreren Pfaden getrennt durch vertikale Striche (|). Ein Pfad besteht aus einem oder mehreren nicht-leeren Zeichenketten getrennt durch Schrägstriche (/). Der erste String muss ein Variablenname sein (einer feststehenden oder benutzerdefinierten Variable) und die übrigen Zeichenketten, die Pfadsegmente, dürfen Buchstaben, Ziffern, Leerzeichen und die Satzzeichen Unterstrich, Bindestrich, Punkt, Komma und Tilde enthalten. Zum Beispiel: request/cookies/hafermehl nothing here/eine_datei 2001_02.html.tar.gz/foo root/zu/zweig | default request/name | string:Anonymer Feigling Wenn ein Path-Ausdruck berechnet wird, versucht Zope den Pfad von links nach rechts zu durchlaufen, bis es am Ende angelangt ist oder keine Pfadsegmente mehr hat. Um einen Pfad zu durchlaufen, holt es sich zuerst das Objekt, das in der Variable gespeichert ist. Für jedes Pfadsegment läuft es vom aktuellen Objekt bis zum Unterobjekt, das durch das Pfadsegment angegeben wird. Unterobjekte werden über die Standard-Zope-Traversierungsregeln (mit getattr, getitem, oder Traversal-Hooks) ausfindig gemacht.. Ist ein Pfad einmal erfolgreich durchlaufen, ist das daraus entstandene Objekte der Wert des Ausdrucks. Wenn es ein aufrufbares Objekt ist, wie etwa eine Methode oder eine Vorlage, wird es aufgerufen. Wenn ein Druchlaufschritt fehlschlägt, wird die Berechnung beim nächsten Pfad fortgesetzt. Wenn keine weiteren Pfade existieren, ist ein Fehler das Ergebnis. Der Ausdruck in einer Reihe von Pfaden, getrennt durch vertikale Striche, kann ein beliebiger TALES-Ausdruck sein. Zum Beispiel 'request/name | string:Anonymer Feigling'. Dies ist vor allem nützlich, wenn man Standardwerte bereitstellen will, wie Zeichenketten oder Zahlen, die nicht als Path-Ausdrücke ausgedrückt werden können. Wenn kein Pfad angegeben wird, ist das Ergebnis nothing. Da jeder Pfad mit einem Variablennamen beginnen muss, benötigt man eine Reihe von Startvariablen, die man verwenden kann, um andere Objekte und Werte aufzufinden. Für eine Liste feststehender Varaiblen sehen Sie im TALES-Überlick nach. Da Variablennamen zuerst in den lokalen Variablen, dann in den globalen Variablen und dann erst in dieser Liste gesucht werden, verhalten sich diese Namen genau wie feststehende Variablen in Python: Sie sind immer verfügbar, aber sie können durch Deklaration globaler oder lokaler Variablen verdeckt werden. Man kann die feststehenden Namen immer explizit durch Voranstellen von CONTEXTS ansprechen (Zum Beispiel CONTEXTS/root, CONTEXTS/nothing, etc.). BeispieleEine Cookie-Variable oder eine Eigenschaft einfügen:
Voreinstellung
Den Benutzernamen einfügen:
TALES-Python-AusdrückeSyntaxSyntax des Python-Ausdrucks: Jeder gültige Ausdruck der Python-Sprache BeschreibungPython-Ausdrücke berchnen Python-Code in einer sicherheithalber eingeschränkten Umgebung. PYthon-Ausdrücke bieten die selben Möglichkeiten wie diejenigen, die in python-basierten Skripten und DTML-Variablenausdrücken zur Verfügung stehen. SicherheitsbeschränkungenPython-Ausdrücke unterliegen den selben Sicherheitsbeschränkungen wie python-basierte Skripte. Diese Beschränkungen beinhalten:
Trotz dieser Einschränkungen können böswillige Python-Ausdrücke Probleme verursachen. Für weitere Informationen sehen Sie im Zope-Buch nach. Feststehende FunktionenPython-Ausdrücke haben die selben feststehenden Funktionen wie python-basierte Skripte mit einige zusätzliche. Diese Standard-Python-Ausdrücke sind verfügbar: Die Funktionen Zusätzlich sind diese Hilfsfunktionen verfügbar: Schließlich gibt es diese Funktionen in Python-Ausdrücken, jedoch nicht in python-basierten Skripten:
Python-ModuleViele Python-Module sind standardmäßig verfügbar. Sie können weitere Module verfügbar machen. Man kan Module entweder über Path-Ausdrücke (zum Beipiel 'modules/string/join') oder in Python über das Zuordnungsobjekt
BeispieleVerwendung eines Moduls (eine zufällige Auswahl aus einer Liste treffen):
Eine zufällige Zahl zwischen eins und fünf
Zeichenkettenverarbeitung (den Benutzernamen in Großbuchstaben umwandeln):
Grundlegende Mathematik (eine Bildgröße in Megabytes umwandeln):
Zeichenkettenformattierung (eine Gleitkommazahl auf zwei Nachkommastellen formattieren):
TALES-String-AusdrückeSyntaxSyntax des String-Ausdrucks: string-ausdruck ::= ( reiner_string | [ varsub ] )* varsub ::= ( '$' Pfad ) | ( '${' Pfad '}' ) reiner_string ::= ( '$$' | kein_dollar )* kein_dollar ::= alle zeichen außer '$' BeschreibungString-Ausdrücke interpretieren die Ausdruckszeichenkette als Text. Wenn keine Ausdruckszeichenkette übergeben wird, ist die resultierende Zeichenkette leer. Die Zeichenkette kann Variablenersetzungen der Form BeispieleGrundlegende Formattierung einer Zeichenkette:
Spam und Eier
Pfade verwenden:
Verwendung eines Dollar-Zeichens:
METAL-ÜberblickDer Standard Macro Expansion Template Attribute Language (METAL) dient zur Vorverarbeitung von HTML/XML-Makros. Es kann zusammen mit oder unabhängig von TAL und TALES verwendet werden. Makros bieten eine Möglichkeit, ein Stück zur Darstellung in einer Vorlage zu definieren und es mit anderen Vorlagen zu teilen, sodass sich Änderungen am Makro sofort auf alle Stellen auswirken die es verwenden. Darüberhinaus werden Makros immer als vollständig ausgeschriebener Code dargestellt, sogar im Quelltext einer Vorlage, sodass die Vorlage ihrer endgültigen Darstellung sehr nahe kommt. METAL-NamensraumDer METAL-Namensraum-URI and der empfohlene Alias sind derzeit folgendermaßen festgelegt: xmlns:metal="http://xml.zope.org/namespaces/metal" Wie auch der TAL-Namensraum-URI, ist dieser URI nicht an eine Webseite gebunden, er ist lediglich ein eindeutiger Bezeichner. Zope benötigt keine Deklaration eines XML-Namensraums wenn Vorlagen mit dem Inhaltstyp METAL-AnweisungenMETAL definiert mehrere Anweisungen:
Obwohl METAL die Syntax nicht-terminaler Anweisungselemente nicht festlegt, sondern der Implementierung überlässt, wird in der TALES-Spezifikation eine kanonische Ausdruckssyntax für die Verwendung in METAL-Argumenten beschrieben. Siehe auchTAL-Überblick TALES-Überblick metal:define-macro metal:use-macro metal:define-slot metal:fill-slot define-macro: ein Makro definierenSyntax
argument ::= Name BeschreibungDie Anweisung In Zope ist eine Makro-Definition als Unterobjekt des Objekts Beispieleeinfache Makro-Definition:
Siehe auchmetal:use-macro metal:define-slot define-slot: einen anpassbaren Makropunkt definierenSyntax
argument ::= Name BeschreibungDie Anweisung Die Anweisung Slot-Namen müssen innerhlab eines Makros eindeutig sein. BeispieleEinfaches Makro mit Slot:
Dieses Beispiel definiert ein Makro mit einem Slot namens Siehe auchmetal:fill-slot fill-slot: ein Makro anpassenSyntax
argument ::= Name BeschreibungDie Anweisung Die Anweisung Slot-Namen müssen innerhalb eines Makros eindeutig sein. Wenn der angegebene Slot im Makro nicht exisitert, wird der Slot-Inhalt ohne Fehlermeldung ignoriert. BeispieleGegeben sei dieses Makro:
Man kann den Slot
Siehe auchmetal:define-slot use-macro: ein Makro verwendenSyntax
argument ::= ausdruck BeschreibungDie Anweisung In Zope wird der Ausdruck im Allgemeinen ein Path-Ausdruck sein, der auf ein Makro verweist, das in einer anderen Vorlage definiert wurde. Für weitere Informationen sehen Sie unter "metal:define-macro" nach. Der Erweiterungsvorgang bei einem Makros ist das Aufsetzen eines Unterbaums von einem anderen Dokument (oder von anderswo im aktuellen Dokument) an die Stelle des Anweisungselements und dem gleichzeitigen Ersetzen des vorhandenen Unterbaums. Teile des ursprünglichen Unterbaums können erhalten bleiben, aufgesetzt auf den neuen Unterbaum, wenn das Makro Slots besitzt. Für weitere Informationen sehen Sie unter "metal:define-slot" nach. Wenn der Makro-Körper wiederum Makros verwendet, werden diese zuerst erweitert. Wenn ein Makro erweitert wird sein BeispieleGrundlegende Verwendung eines Makros:
Diese Beispiel bezieht sich auf das Siehe auchmetal:define-macro metal:fill-slot Bei der Beschreibung von tal:omit-tag taucht folgender Satz auf: Zope behandelt leere Zeichenketten, leere Sequenzen, eine Null, None, nothing und default als unwahr (false). Alle anderen Werte werden als wahr (true) erachtet. default wird so ich das sehe aber im Gegenteil als wahr betrachtet, d.h. das tag wird weggelassen. |