Zope-Objekte referenzieren
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.






