Deutsche Zope User Group
Gast 2 Benutzer online
DZUG-News

Zopebuch: Inhaltsverzeichnis

Anhang C: Zope-Page-Templates-Referenz

Zope-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-Überblick

Der 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 content-Anweisung so aussehen: tal:content="string:Hallo". Das Element in dem eine Anweisung definiert wird ist dessen Anweisungselement. Die meisten TAL-Anweisungen benötigen Ausdrücke, aber die Syntax und Semantik dieser Ausdrücke sind nicht Teil von TAL. TALES wird für diesen Zweck empfohlen.

TAL-Namensraum

Der 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 text/html. Jedoch benötigt es die Deklaration eines XML-Namensraums für alle anderen Inhaltstypen.

TAL-Anweisungen

Dies sind die TAL-Anweisungen:

  • tal:attributes - dynamisch Elementattribute ändern.
  • tal:define - Variablen definieren.
  • tal:condition - Bedingungen überprüfen.
  • tal:content - den Inhalt eines Elements ersetzen.
  • tal:omit-tag - ein Element entfernen, nicht jedoch dessen Inhalt.
  • tal:on-error - Fehler behandeln.
  • tal:repeat - ein Element wiederholen.
  • tal:replace - den Inhalt eines Elements ersetzen und das Element entfernen, nicht jedoch dessen Inhalt.

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.

Anweisungsreihenfolge

Wenn 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 content und replace nicht zusammen auftreten dürfen.

Falls ein Element mehrere Anweisungen besitzt werden sie in dieser Reihenfolge ausgeführt:

  1. define
  2. condition
  3. repeat
  4. content oder replace
  5. attributes
  6. omit-tag

Da die Anweisung on-error nur bei Auftreten eines Fehlers aufgerufen wird, ist sie in der Liste nicht aufgeführt.

Die Überlegung, die hinter dieser Reihenfolge steht ist folgende: Man möchte oft Variablen festlegen, die in anderen Anweisungen verwendet werden, also kommt define als erstes. Gleich danach muss entschieden werden, ob dieses Element überhaupt enthalten sein soll, also kommt condition als nächstes. Da die Bedingung von Variablen abhängen kann, die man gerade gesetzt hat kommt es nach define. Es ist nützlich verschiedene Teile eines Elements bei jedem Schleifendurchlauf durch andere Werte ersetzen zu können, also kommt repeat als nächstes. Es macht keinen Sinn Attribute zu ersetzen und sie danach weguwerfen, also kommt zuletzt attributes. Die übrigen Anweisungen fallen zusammen, weil jedes von ihnen das Anweisungselement ersetzen oder verändern.

Siehe auch

TALES-Überblick

METAL-Überblick

tal:attributes

tal:define

tal:condition

tal:content

tal:omit-tag

tal:on-error

tal:repeat

tal:replace

attributes: Elementattribute ersetzen

Syntax

tal:attributes-Syntax:

        argument            ::= attribut_anweisung [';' attribut_anweisung]*
        attribut_anweisung  ::= attribut_name ausdruck
        attribut_name       ::= [namensraum ':'] Name
        namensraum          ::= Name

Hinweis: Wenn Sie einen Strichpunkt (;) in einem ausdruck eingeben wollen, muss er mit einem Strichpunkt als Steuerzeichen versehen werden, was zu einer Verdopplung führt (;;).

Beschreibung

Die Anweisung tal:attributes ersetzt den Wert eines Attributs (oder erzeugt ein Attribut) mit einem dynamischen Wert. Sie können ein Attribut mit einem Namensraum - zum Beispiel html:table - näher bestimmen, wenn Sie ein XML-Dokument mit mehreren Namensräumen erzeugen. Der Wert jedes Ausdrucks wird gegebenenfalls in eine Zeichenkette umgewandelt.

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 tal:attributes auf ein Element mit einer aktiven tal:replace-Anweisung anwendet, wird die tal:attributes-Anweisung ignoriert.

Wenn man tal:attributes auf ein Element mit einer tal:repeat-Anweisung anwendet, wird die Ersetzung bei jeder Wiederholung des Elements durchgeführt und der Ersetzungsausdruck wird für jede Wiederholung neu berechnet.

Beispiele

Einen Verweis ersetzen:

        

Zwei Attribute ersetzen:

        

condition: ein Element bedingt einfügen oder entfernen

Syntax

tal:condition-Syntax:

        argument ::= ausdruck

Beschreibung

Die Anweisung tal:condition fügt das Anweisungselement nur in die Vorlage ein, wenn die Bedingung erfüllt ist, anderenfalls wird es weggelassen. Wenn ihr Ausdruck den Wert true (wahr) ergibt, wird das Element normal weiterverarbeitet, anderenfalls wird das Anweisungselement sofort aus der Vorlage entfernt. Für diese Fälle ist der Wert nothing unwahr und default hat den selben Effekt, als würde man einen wahren Wert zurückgeben.

Hinweis: Zope betrachtet fehlende Variablen, None, Null, leere Zeichenketten und leere Folgen als unwahr. Alle anderen Werte sind wahr.

Beispiele

Eine 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):

        

Hierher kommt die Nachricht

Hierher kommt die Nachricht

Auf wechselseitige Bedingungen prüfen:

        

gerade

ungerade

content: den Inhalt eines Elements ersetzen

Syntax

tal:content-Syntax:

        argument ::= (['text'] | 'structure') ausdruck

Beschreibung

Um nicht ein komplettes Element ersetzen zu müssen, kann man Text oder Strukturen anstatt der Unterelemente mit der Anweisung tal:content einfügen. Das Anweisungsargument entspricht genau dem von tal:replace und wird in auf die selbe Weise interpretiert. Wenn der Ausdruck nothing ergibt, bekommt das Anweisungselement keine Unterelemente. Wenn der Ausdruck default ergibt, bleibt der Inhalt des Elements unverändert..

Hinweis: Das Standard-Ersetzungsverhalten ist text.

Beispiele

Den Benutzernamen einfügen:

        

Fred Farkas

HTML/XML einfügen:

        

Hierer kommt ausgezeichneter Inhalt.

Siehe auch

tal:replace

define: Variablen definieren

Syntax

tal:define-Syntax:

        argument        ::= define_bereich [';' define_bereich]*
        define_bereich  ::= (['local'] | 'global') define_var
        define_var      ::= variablenname ausdruck
        variablenname   ::= Name

Hinweis: Wenn Sie einen Strichpunkt (;) in einem ausdruck eingeben wollen, muss er mit einem Strichpunkt als Steuerzeichen versehen werden, was zu einer Verdopplung führt (;;).

Beschreibung

Die Anweisung tal:define definiert Variablen. Man kann zwei verschiedene Arten von TAL-Variablen definieren: lokale und globale. Wenn man eine lokale Variable in einerm Anweisungselement definiert, kann man diese Variable lediglich in diesem Element und seinen Unterelementen verwenden. Wenn man eine lokale Variable in einem Unterlement neudefiniert, versteckt die neue Definition die Definition des umschließenden Elements innerhalb des inneren Elements. Wenn man eine globale Variable definiert, kann man sie in jedem Element verwenden, dass nach dem definierenden Element verarbeitet wird. Wenn man eine globale Variable neudefiniert, ersetzt man ihre Definition für den Rest der Vorlage.

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.

Beispiele

Eine 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 Inhalt

Syntax

tal:omit-tag-Syntax:

        argument ::= [ ausdruck ]

Beschreibung

Die Anweisung tal:omit-tag läßt den Inhalt eines Tags unberührt, während es die umgebendenden Start- und End-Tags weglässt.

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.

Beispiele

Weglassen eines Tags ohne Bedingung:

        
... aber dieser Text wird bleiben.

Weglassen eines Tags mit Bedingung:

        Ich darf fettgedruckt sein.

Das obige Beispiel wird das Tag b weglassen, wenn die Variable bold false ist.

Zehn Absatz-Tags (p) ohne das umschließende Tag erzeugen:

        
          

1

on-error: Fehler behandeln

Syntax

tal:on-error-Syntax:

        argument ::= (['text'] | 'structure') ausdruck

Beschreibung

Die Anweisung tal:on-error ermöglicht Ihrer Vorlage Fehlerbehandlung. Wenn eine TAL-Anweisung einen Fehler erzeugt, sucht der TAL-Interpreter nach einer tal:on-error-Anweisung im selben Element, dann im umschließenden Element und so weiter. Das erste tal:on-error das gefunden wird, wird aufgerufen. Es wird wie eine tal:content-Anweisung behandelt.

Eine lokale Variable, error, wird gesetzt. Diese Variable hat folgende Attribute:

type
der Ausnahmetyp
value
die Ausnahmeinstanz
traceback
das Traceback-Objekt

Die einfachste Art einer tal:on-error-Anweisung hat einen Fehlertext oder nothing als Ausdruck. Eine komplexere Behandlungsroutine könnte ein Skript aufrufen, das den Fehler untersucht und entweder einen Fehlertext ausgibt oder eine Ausnahme wirft, um den Fehler nach außen weiterzugeben.

Beispiele

Einfache 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 "

Durch 0 kann nicht geteilt werden.

" else: return """

Ein Fehler ist aufgetreten.

Fehlertyp: %s

Fehlerwert: %s

""" % (error.type, error.value)

Siehe auch

Python Tutorial: Errors and Exceptions

Python Built-in Exceptions

repeat: ein Element wiederholen

Syntax

tal:repeat-Syntax:

        argument      ::= variablenname ausdruck
        variablenname ::= Name

Beschreibung

Die Anweisung tal:repeat repliziert einen Unterbaum Ihres Dokuments für jedes Element in einer Sequenz. Der Ausdruck sollte eine Sequenz ergeben. Wenn die Sequenz leer ist, wird das Anweisungselement gelöscht, wenn nicht wird es für jeden Wert in der Sequenz wiederholt. Wenn der Ausdruck default ist, wird das Element unverändert belassen und es werden keine neuen Variablen definiert.

variablenname wird verwendet, um eine lokale Variable und eine Wiederholungsvariable zu definieren. Bei jeder Wiederholung wird die lokale Variable auf das aktuelle Sequenzelement gesetzt und die Wiederholungsvariable wird auf ein Iterationsobjekt gesetzt.

Wiederholungsvariablen

Wiederholungsvariablen 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 repeat ansprechbar.

Die folgenden Informationen sind über die Wiederholungsvariable verfügbar:

  • index - Anzahl der Wiederholungen, beginnend bei Null.
  • number - Anzahl der Wiederholungen, beginnend bei Eins.
  • even - ist true bei Wiederholungen mit geradem Index (0, 2, 4, ...).
  • odd - ist true bei Wiederholungen mit ungeradem Index (1, 3, 5, ...).
  • start - ist true beim Anfangsdurchlauf (Index 0).
  • end - ist true beim End-, also beim letzten Durchlauf.
  • first - ist true beim ersten Element einer Gruppe - siehe Anmwerkung unten
  • last - ist true beim letzten Element einer Gruppe - siehe Anmwerkung unten
  • length - Länge der Sequenz, was gleichzeitig auch der Gesamtzahl der Wiederholungen entspricht.
  • letter - Anzahl der Wiederholungen als Kleinbuchstabe: "a" - "z", "aa" - "az", "ba" - "bz", ..., "za" - "zz", "aaa" - "aaz", usw.
  • Letter - Genau wie letter, nur mit Großbuchstaben.
  • roman - Anzahl der Wiederholungen kleine römische Zahlen: "i", "ii", "iii", "iv", "v", etc.
  • Roman - Genau wie roman, nur mit Großbuchstaben.

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 repeat, dem Namen der Anweisungsvariablen und dem Namen der Information die sie abfragen wollen, zum Beispiel repeat/item/start. In Python-Ausdrücken benutzen Sie die normale Dicitionary-Schreibweise um die Wiederholungsvariable zu bekommen, dann Attributzugriff um die Information zu erhalten, zum Beispiel "python:repeat['item'].start".

Beachten Sie, dass first und last für die Verwendung in sortierten Listen gedacht sind. Sie versuchen die Sequenz in Gruppen von Element mit gleichem Wert einzuteilen. Wenn Sie einen Pfad verwenden, wird der Wert, der sich durch Verfolgen dieses Pfads ergibt, für die Gruppierung verwendet. Andernfalls wird der Wert des Elements verwendet. Sie können den Pfad bereitstellen, indem Sie ihn als Parameter übergeben, wie bei "python:repeat['item'].first('color')" oder indem Sie ihn an den Pfad der Wiederholungsvariable anhängen, wie bei "repeat/item/first/color".

Beispiele

Über eine Sequenz von Zeichenketten iterieren:

Einfügen einer Reihe von Tabellenzeilen und verwenden der Wiederholungsvariablen um die Zeilen zu nummerieren:

        
1 Ding 1,50 €

Verschachtelte Wiederholungen:

        
1 * 1 = 1

Objekte einfügen. Teilt Objekte anhand des Metatyps in Gruppen ein, indem es eine Linie dazwischen setzt:

        

Meta-Typ

Objekt-ID


Beachten Sie, dass die Objekte im obigen Beispiel bereits nach dem Metatyp sortiert sein sollten.

replace: ein Element ersetzen

Syntax

tal:replace-Syntax:

        argument ::= (['text'] | 'structure') ausdruck

Beschreibung

Die Anweisung tal:replace ersetzt ein Element mit dynamischem Inhalt. Sie ersetzt das Anweisungselement entweder mit Text oder einer Struktur (Code, bei dem die Steuerzeichen nicht ersetzt wurden). Der Körper der Anweisung ist ein Ausdruck mit optionalem Typ-Präfix. Der Wert des Ausrucks wird in eine Zeichenkette mit ersetzten Steuerzeichen konvertiert, wenn man dem Ausdruck text voranstellt oder das Präfix weglässt und er wird unverändert eingefügt, wenn man structure voranstellt. Beim Ersetzen von Steuerzeichen wird "&" in "&", "<" in "<", und ">" in ">" umgewandelt.

Wenn der Wert nothing ist, wird das Element einfach entfernt. Wenn der Wert default ist, bleibt das Element unverändert.

Beispiele

Zwei Arten den Titel einer Vorlage einzufügen:

        Titel
        Titel

HTML/XML einfügen:

        

Nichts einfügen:

        
Dieses Element is ein Kommentar.

Siehe auch

tal:content

TALES-Überblick

Der 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-Ausdruckstypen

Dies sind die von Zope unterstüzten TALES-Ausdruckstypen:

  • path-Ausdrücke - finden einen Wert anhand seines Pfads.
  • exists-Ausdrücke - überprüfen, ob ein Pfad gültig ist.
  • nocall-Ausdrücke - finden ein Objekt anhand seines Pfads.
  • not-Ausdrücke - negieren einen Ausdruck
  • string-Ausdrücke - formatieren eine Zeichenkette
  • python-Ausdrücke - führen einen Python-Ausdruck aus

Feststehende Namen

Dies sind die Namen die TALES-Ausdrücken in Zope ständig zur Verfügung stehen:

  • nothing - spezieller Wert, der einen Nicht-Wert darstellt (z. B. void, None, NULL).
  • default - spezieller Wert, der bestimmt, dass vorhandener Text nicht ersetzt werden soll. Für Einzelheiten darüber, wie default von den jweiligen TAL-Anweisungen interpretiert wird, sehen Sie auch in deren der Dokumentation nach.
  • options - Die Schlüsselwort-Argumente die der Vorlage übergeben wurden. Diese sind üblicherweise eher verfügbar, wenn eine Vorlage von Methoden und Skript aufgerufen wird, als wenn der Aufruf vom Web kam.
  • repeat - die repeat-Variablen; Siehe tal:repeat-Dokumentation.
  • attrs - Ein Dictionary, das die anfänglichen Werte der Attribute des aktuellen Anweisungs-Tags enthält.
  • CONTEXTS - die Liste der feststehenden Namen (diese Liste). Dies kann verwendet werden, um auf eine feststehende Variable zuzugreifen, die durch eine lokale oder globale Variable gleichen Namens verdeckt wurde.
  • root - Das oberste Objekt im System: der Zope-Wurzelordner.
  • here - das Objekt auf das die Vorlage gerade angewandt wird.
  • container - Der Ordner in dem sich die Vorlage befindet.
  • template - Die Vorlage selbst.
  • request - das Objekt der Veröffentlichungsanfrage.
  • user - das Objekt des autentifizierten Benutzers.
  • modules - eine Sammlung durch die Python-Module und -Pakete angesprochen werden können. Es können nur Module angesprochen werden, die vom Zope-Sicherheitssystem (der "Zope security policy") freigegeben wurden.

Beachten Sie, dass die Namen root, here, container, template, request, user und modules optionale Namen sind, die von Zope unterstützt werden. Sie werden vom TALES-Standard jedoch nicht benötigt.

Siehe auch

TAL-Überblick

METAL-Überblick

exists-Ausdrücke

nocall-Ausdrücke

not-Ausdrücke

string-Ausdrücke

path-Ausdrücke

python-Ausdrücke

TALES-Exists-Ausdrücke

Syntax

Syntax des Ausdrucks Exists:

        exists-ausdruck ::= 'exists:' path-ausdruck

Beschreibung

Exists-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:

        

Bitte geben Sie eine Zahl zwischen 0 und 5 ein

Beachten Sie, dass Sie in diesem Fall den Ausdruck not:request/form/nummer nicht verwenden können, da dieser Ausdruck true wäre, wenn die Varaible nummer existiert und Null ist.

TALES-Nocall-Ausdrücke

Syntax

Syntax des Ausdrucks Nocall:

        nocall-ausdruck ::= 'nocall:' path-ausdruck

Beschreibung

Nocall-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.

Beispiele

Verwendung von Nocall, um die Eigenschaften eines Dokument zu erhalten:

        
        Id: Titel

Verwendung von Nocall bei einer Funktion:

        

Dieses Beipiel definiert eine Variable join, die mit der Funktion string.join verknüpft ist.

TALES-Not-Ausdrücke

Syntax

Syntax des Ausdrucks Not:

        not-ausdruck ::= 'not:' ausdruck

Beschreibung

Not-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:

  1. die Zahl 0 ist false
  2. Zahlen > 0 sind true
  3. eine leere Zeichenkette oder andere Folgen sind false
  4. eine nicht-leere Zeichenkette oder andere Folgen sind true
  5. ein Nicht-Wert (z. B. void, None, Nil, NULL, etc.) ist false
  6. alle anderen Werte sind abhängig von der Implementation.

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.

Beispiele

Testen einer Folge:

        

Es existieren keine enthaltenen Objekte.

TALES-Path-Ausdrücke

Syntax

Syntax des Path-Ausdrucks:

        PathAusdr ::= Pfad [ '|' Pfad ]*
        Pfad      ::= Variable [ '/' URL-Segment ]*
        Variable  ::= Name

Beschreibung

Ein 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.).

Beispiele

Eine Cookie-Variable oder eine Eigenschaft einfügen:

        
          Voreinstellung
        

Den Benutzernamen einfügen:

        

Benutzername

TALES-Python-Ausdrücke

Syntax

Syntax des Python-Ausdrucks:

        Jeder gültige Ausdruck der Python-Sprache

Beschreibung

Python-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änkungen

Python-Ausdrücke unterliegen den selben Sicherheitsbeschränkungen wie python-basierte Skripte. Diese Beschränkungen beinhalten:

Zugriffsgrenzen
Pyhon-Ausdrücke unterliegen den Berechtigungs- und Rollen-Siucherheitsbeschränkungen von Zope. Darüberhinaus können Ausdrücke keine Objekte ansprechen, deren Name mit einem Unterstrich beginnt.
Schreibgrenzen
Python-Ausdrücke können keine Attribute von Zope-Objekten ändern.

Trotz dieser Einschränkungen können böswillige Python-Ausdrücke Probleme verursachen. Für weitere Informationen sehen Sie im Zope-Buch nach.

Feststehende Funktionen

Python-Ausdrücke haben die selben feststehenden Funktionen wie python-basierte Skripte mit einige zusätzliche.

Diese Standard-Python-Ausdrücke sind verfügbar: None, abs, apply, callable, chr, cmp, complex, delattr, divmod, filter, float, getattr, hash, hex, int, isinstance, issubclass, list, len, long, map, max, min, oct, ord, repr, round, setattr, str, tuple.

Die Funktionen range und pow sind zwar verfügbar und funktionieren genau wie im Standard-Python, jedoch sind sie wurden sie so eingeschränkt, dass sie keine sehr großen Zahlen und Sequenzen erzeugen können. Diese Einschränkung hilft, sich vor Denial-Of-Service-Angriffe zu schützen.

Zusätzlich sind diese Hilfsfunktionen verfügbar: DateTime, test und same_type. Für weitere Informationen über diese Funktionen sehen Sie unter DTML-Funktionen nach.

Schließlich gibt es diese Funktionen in Python-Ausdrücken, jedoch nicht in python-basierten Skripten:

path(Zeichenkette)
Berechnet einen TALES-Path-Ausdruck.
string(Zeichenkette)
Berechnet einen TALES-String-Ausdruck.
exists(Zeichenkette)
Berechnet einen TALES-Exists-Ausdruck.
nocall(Zeichenkette)
Berechnet einen TALES-Nocall-Ausdruck.

Python-Module

Viele 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 modules (zum Beipiel 'modules["string"].join') ansprechen. Hier sind die Standardmodule:

string
Das Standard-Python-Modul String. Hinweis: Die meisten der Funktionen im Modul sind auch als Methoden auf String-Objekte verfügbar.
random
Das Standard-Python-Modul Random.
math
Das Standard-Python-Modul Math.
sequence
Ein Modul mit einer mächtigen Sortierfunktion. Für weitere Informationen sehen Sie unter "sequence" nach.
Products.PythonScripts.standard
Verschiedene Funktionen zur HTML-Formattierung aus DTML. Für weitere Informationen sehen Sie unter "Products.PythonScripts.standard" nach.
ZTUtils
Funktionen zur Stapelverarbeitung, ähnlich denen die dtml-in bietet. Für weitere Informationen sehen Sie unter "ZTUtils" nach.
AccessControl
Sicherheits- und Zugriffsüberprüfungs-Funktionen. Für weitere Informationen sehen Sie unter "AccessControl" nach.

Beispiele

Verwendung 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):

        

Benutzername

Grundlegende Mathematik (eine Bildgröße in Megabytes umwandeln):

        

12.2323

Zeichenkettenformattierung (eine Gleitkommazahl auf zwei Nachkommastellen formattieren):

        

13.56

TALES-String-Ausdrücke

Syntax

Syntax des String-Ausdrucks:

        string-ausdruck  ::= ( reiner_string | [ varsub ] )*
        varsub           ::= ( '$' Pfad ) | ( '${' Pfad '}' )
        reiner_string    ::= ( '$$' | kein_dollar )*
        kein_dollar      ::= alle zeichen außer '$'

Beschreibung

String-Ausdrücke interpretieren die Ausdruckszeichenkette als Text. Wenn keine Ausdruckszeichenkette übergeben wird, ist die resultierende Zeichenkette leer. Die Zeichenkette kann Variablenersetzungen der Form $Name oder ${Pfad} enthalten, wobei Name ein Variablenname ist und Pfad ein Path-Ausdruck. Der Wert des Path-Ausdrucks wird als Zeichenkette mit ersetzten Sonderzeichen in die Zeichenkette eingefügt. Um zu verhindern, dass ein $ entsprechend interpretiert wird, muss es als $$ geschrieben werden.

Beispiele

Grundlegende Formattierung einer Zeichenkette:

        
          Spam und Eier
        

Pfade verwenden:

        

Gesamt: 12

Verwendung eines Dollar-Zeichens:

        

Kosten: $42.00

METAL-Überblick

Der 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-Namensraum

Der 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 text/html erzeugt werden. Für alle anderen Inhaltstypen wird jedoch eine die Deklaration eines XML-Namensraums benötigt.

METAL-Anweisungen

METAL definiert mehrere Anweisungen:

  • metal:define-macro - Ein Makro definieren.
  • metal:use-macro - Ein Makro verwendet.
  • metal:define-slot - Einen anpassbaren Makropunkt definieren.
  • metal:fill-slot - Ein Makro anpassen.

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 auch

TAL-Überblick

TALES-Überblick

metal:define-macro

metal:use-macro

metal:define-slot

metal:fill-slot

define-macro: ein Makro definieren

Syntax

metal:define-macro-Syntax:

        argument ::= Name

Beschreibung

Die Anweisung metal:define-macro definiert ein Makro. Der Name des Makros wird durch den Anweisungsausdruck festgelegt und ist definiert als das Element und dessen Unterbaum.

In Zope ist eine Makro-Definition als Unterobjekt des Objekts macros einer Vorlage verfügbar. Um zum Beispiel ein Makro namens kopf in einer Volage namens haupt.html anzusprechen, könnte man den Path-Ausdruck haupt.html/macros/kopf verwenden.

Beispiele

einfache Makro-Definition:

        

Copyright 2001, Foobar GmbH

Siehe auch

metal:use-macro

metal:define-slot

define-slot: einen anpassbaren Makropunkt definieren

Syntax

metal:define-slot-Syntax:

        argument ::= Name

Beschreibung

Die Anweisung metal:define-slot definiert einen anpassbaren Makropunkt oder Slot (dt. Einschub). Wenn ein Makro verwendet wird, können dessen Slots ersetzt werden, um das Makro anzupassen. Alot-Definitionen stellen Standardinhalt für den Slot bereit. Man erhält den Standardinhalt, falls man sich entscheidet das Makro nicht anzupassen wenn man es benutzt.

Die Anweisung metal:define-slot muss innerhalb einer metal:define-macro-Anweisung verwendet werden.

Slot-Namen müssen innerhlab eines Makros eindeutig sein.

Beispiele

Einfaches Makro mit Slot:

        

Hallo Welt

Dieses Beispiel definiert ein Makro mit einem Slot namens name. Wenn man dieses Makro verwendet kann man das b-Element anpassen indem man den Slot name füllt.

Siehe auch

metal:fill-slot

fill-slot: ein Makro anpassen

Syntax

metal:fill-slot-Syntax:

        argument ::= Name

Beschreibung

Die Anweisung metal:fill-slot passt ein Makro an, indem sie einen Slot im Makro mit dem Anweisungselement (und dessen Inhalt) ersetzt.

Die Anweisung metal:fill-slot muss innerhalb einer metal:define-macro-Anweisung verwendet werden.

Slot-Namen müssen innerhalb eines Makros eindeutig sein.

Wenn der angegebene Slot im Makro nicht exisitert, wird der Slot-Inhalt ohne Fehlermeldung ignoriert.

Beispiele

Gegeben sei dieses Makro:

        

Hallo Welt

Man kann den Slot name folgendermaßen füllen:

        

Hallo Kevin Bacon

Siehe auch

metal:define-slot

use-macro: ein Makro verwenden

Syntax

metal:use-macro-Syntax:

        argument ::= ausdruck

Beschreibung

Die Anweisung metal:use-macro ersetzt das Anweisungselement mit einem Makro. Der Anweisungsausdruck beschriebt eine Makrodefinition.

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 metal:define-macro-Attribut mit dem metal:use-macro des Anweisungselements ersetzt. Dies macht das Wurzelelement des erweiterten Malros zu einem gültigen use-macro-Anweisungselement.

Beispiele

Grundlegende Verwendung eines Makros:

        

kopf-Makro definiert in der Vorlage andere.html

Diese Beispiel bezieht sich auf das kopf-Makro, das in der Vorlage andere.html definiert wurde, die sich im selben Ordner wie die aktuelle Vorlage befindet. Wenn das Marko erweitert wird, wird das Element p un dessen Inhalt druch das Makro ersetzt. Hinweis: das metal:use-macro-Attribut bleibt beim Ersetzungselement erhalten.

Siehe auch

metal: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.