Skip to topic | Skip to bottom
Home
Zope.TaLesr1.13 - 11 Sep 2006 - 07:29 - FrankBurkhardt [Zum Ende]

Start of topic | Direkt zum Menü

TALES - Ausdrücke in TaL

Summary: Die Sprache/Syntax, die in TaL-Attributen in PageTemplates zum Einsatz kommt

Einführung

TaLes ist die Syntax, der die Werte der TAL-Attribute in den Tags eines PageTemplates genügen müssen. Sie wird benutzt, um die in einem PageTemplate auf Methoden und Daten von Python-Objekten zuzugreifen und verbindet damit das Markup des PageTemplate mit Daten (meist, jedoch nicht ausschliesslich aus der ZodB).

Ausdruckstypen

TaLes kennt verschiedene Ausdruckstypen, die hier näher erläutert werden sollen. Per default wird text, der von einem TaLes -Ausdruck zurückgeliefert wird immer HTML-gequotet. Will man das nicht, muß es explizit mit dem TaL-Modifier structure unterbunden werden.

Path-Ausdrücke

Solche Ausdrücke referenzieren Objekte um mit diesen verbundene Methoden aufzurufen oder Attribute der Objekte auszulesen. Ein solcher Pfad kann sich z.B. an vielen ineinandergehängten Dictionaries entlanghangeln:

<span tal:define="dict context/get_dictionary_tree"
   tal:content="dict/first_level/second_level/even_more/value_i_want"
   />

Diese Ausdrücke greifen dabei immer auf Unterobjekte der TaLes benutzbaren Standard-Variablen (siehe weiter unten im Text) oder auf selbstdefiniert Variablen zurück .

Path-Ausdrücke traversieren durch Bäume von Objekten. Dieser Prozess läßt sich auf verschiedene Weisen beeinflussen:

  • durch die ++ -Notation (z.B. ++resource++ )
  • durch andere Namensräume (siehe weiter unten, z.B. zope:title )
  • durch die @@ -Notation - on-the-fly gebildete VieWs (z.B. @@absolute_url )

String-Ausdrücke

String Expressions ( string: ): Diese Ausdrücke sind wie Makros, die sich hauptsächlich aus Text zusammensetzen, in die man jedoch mit ${} auch Path-Expressions beliebiger Komplexität einbetten kann.

Beispiel:

<h1 tal:content="string: ${context/lastname}, ${context/firstname}"></h1>

Python-Kommandos

Python-Expressions ( python: ): hier kann man kleine Python-Skripte einbauen, wobei jedoch der Zugriff auf kritische Objekte durch Schutzmechanismen (Security-Proxies) reglementiert wird.

Beispiel:

<a href="/@@login.html" tal:condition="python: request.pricipal.id = 'zope.anybody'"

In PageTemplates#PythonModules findet man informationen dazu, wie man Python-Module direkt ansprechen kann - auch wenn das nicht als "schön" gilt.

Modifier

TaLes-Ausdrücke können mit sog. Modifiern versehen werden, um die Auswertung des Ausdrucks zu beeinflussen. Modifier sind:

  • not: : Negiert den TaLes-Ausdruck dahinter (sinnvoll z.B. beim TaL-Befehl condition )
  • nocall: : verhindert, dass die folgende Path-Expression ausgewertet wird. Das ist z.B. in folgende Fällen sinnvoll:
    • beim TaL-Befehl define , wenn man die Referenz auf ein Objekt haben will, es jedoch erst später aufgerufen/ausgewertet werden soll
    • wenn man das Objekt eigentlich gar nicht braucht, sondern nur testen will, ob man Zugriffsrechte hab. Damit spart man gleich noch Rechenleistung auf dem Server.
      • <a href="edit.html" tal:condition="nocall: context/@@edit.html">Edit<a>
  • exists: : Testet lediglich, ob ein angegebenes Objekt existiert oder nicht. Das ist im condition -TaL-Attribut sinnvoll.

Diese Schlüsselwörter können leicht mit den ähnlich zu handhabenden Modifiern in TaL vewechselt werden.

TaLes -Namensräume

TaLes kann leicht erweitert werden, um abseites des reinen TraVersing entlang von Objekten um Benutzerspezifische - nennen wir es "Pfadfunktionen" erweitert werden. Dabei kann man in den TraVersing -Prozess spezielle AdapTer einklinken.

Beispiel:

MpgSite stellt einen Namensraum mpg mit einer Methode root zur Verfügung. Diese Methode liefert den RootFolder einer Website. Ermitteln der UrL des RootFolders (auf saubere Weise):

<div tal:content="context/mpg:root/@@absolute_url" />

Es passiert folgendes:

  1. TaLes traversiert entlang des Pfades, nimmt die erste Komponente - das ConText -Objekt.
  2. Die Nächste Komponente enthält einen Doppelpunkt - Zope extrahiert den Namen des Namensraumes ( mpg ) und versucht einen AdapTer zufinden, der für das ConText -Objekt das InterFace zope.app.traversing.interfaces.IPathAdapter zur Verfügung stellt und den Namen mpg trägt.
  3. Im Paket mpgsite.tales ist ein solcher Adapter registriert, Zope adaptiert und erhält das entsprechende Objekt zurück.
  4. Zope liesst das Attribut root dieses Objektes aus. Das ist gelegentlich etwas hinderlich, da man in einem solchen Namespace-AdapTer meist Methoden unterbringt. Deshalb trifft Zope hier auf ein ProPerty, dass letztendlich auf eine Methode verweist. Zurückgeliefert wird der per ZaPi gefundene RootFolder.
  5. TaLes nimmt sich die nächste Pfadkomponente vor - in diesem Fall wird aus dem RootFolder die absolut_url adaptiert.

In TaLes benutzbare Variablen

Es können sämmtliche "root-Ebenen" -Variablen von PageTemplates benutzt werden (siehe PageTemplate#NameSpace ). Zusätzlich stehen noch einige andere TaL-spezifische Variablen zur Verfügung:

  • default : Wenn dieser Ausdruck ausgewertet wird, wird der Standard-Wert zurückgeliefert - also der Wert, der innerhalb der HTML/TaL-Tags steht, die den TaL-Befehl enthalten.
  • modules : Diese Variable erlaubt die Einbindung von Python-Modulen.
  • repeat : Mit dieser Variable kann man auf Daten zugreifen, die innerhalb einer Schleife (siehe repeat -Befehl in TaL) gebraucht werden, die aber vom aktuellen Schleifendurchlauf abhängig sind.
    Beispiel: Die Anzahl der bereits abgearbeiteten Schleifendurchläufe.
  • error : Dieses Objekt steht nur in einem on-error -TaL-Attribut zur Verfügung und enthält im Fehlerfall folgende Daten:
    • type : Die Art des fehlers
    • value : the exception instance ???
    • traceback : Der Python-Traceback

[Zurück zum Start]

Aktuelle Wiki-Seite: Zope > ZopeGlossary > TaLes

[Zurück zum Start]

Alle Inhalte dieses Web dürfen frei kopiert und verändert werden.