Zope-Objekte referenzieren

Dieses Dokument beschreibt die fortgeschrittenen Konzepte von Page Templates. Das Dokument wurde mit Microsoft Word erstellt und mit WordXML automatisch in XML , HTML und HTMLHelp (.chm) konvertiert. Mit WordXML, dem Word-PlugIn der struktur AG, erweitern Sie Microsoft Word zu einem leistungsfähigen XML-Werkzeug.


Zope-Objekte referenzieren

Ein großer Teil der Mächtigkeit von Zope rührt daher, daß spezielle Objekte miteinander verbunden werden. Ihre Page Templates können Skripte verwenden, SQL-Methoden, Kataloge, und eigene Inhaltsobjekte. Um sie benutzen zu können, muß man wissen, wie man auf sie zugreift.

Objekteigenschaften sind für gewöhnlich Attribute, also kann zum Beispiel auf den Titel des Templates mit dem Ausdruck ’template.title’ zugegriffen werden. Die meisten Zope-Objekte unterstützen Aquisition, die es erlaubt, von Super-Objekten Eigenschaften zu erhalten. Das bedeutet, daß der Python-Ausdruck ’here.Control_Panel’ zum Control Panel Objekt des ’root’-Ordners ausgewertet wird. Objekt-Methoden sind Attribute, wie in ’here.objectIds’ und ’request.set’. Auf Objekte, die in einem Ordner enthalten sind, kann als Ordnereigenschaft zugegriffen werden. Da sie jedoch oftmals Ids haben, die keine gültigen Python-Identifier sind, kann die gewohnte Notation nicht verwendet werden. Beispielsweise muß anstatt ’here.penguin.gif’ ’gettattr(here, penguin.gif)’ geschrieben werden.

Manche Objekte wie ’request’, ’modules’ und Zope-Ordner unterstützen Direktzugriff:

request[’URL’]

modules[’math’]

here[‘thing’]

Wird der Direktzugriff auf einem Ordner verwendet, so wird der Name des Ordner nicht akquiriert; der Zugriff hat also nur dann Erfolg, wenn sich tatsächlich ein Objekt mit dem entsprechenden Namen in dem Ordner befindet.

Wie wir schon in früheren Kapiteln gesehen haben, erlauben Pfad-Ausdrücke das Verbergen von Details darüber, wie man von einem Objekt zum anderen gelangt. Zope versucht zuerst einen Attribut-Zugriff, dann einen Direktzugriff. Man kann sowohl ’here/images/penguin.gif’ anstelle von ’python.getattr(here.images, penguin.gif)’ als auch ’request/form/x’ anstelle von ’python:request.form![x]’ schreiben.

Der Kompromiss ist der, daß Pfad-Ausdrücke nicht diese Detailiertheit erlauben. Hat man zum Beispiel eine Form-Variable „get“, muß man ’python:request.form![’get’]’ schreiben, da ’request/form/get’ die „get“-Methode des Form-Dictionary repräsentiert.