Die Anweisung tal:attributes
ersetzt das Attribut src
des img
-Tags durch den Wert von item/icon
. Das Attribut src="/misc_/OFSP/Folder_icon.gif"
in der Vorlage fungiert als Platzhalter.
Achten Sie darauf, dass wir das Attribut tal:content
in der Tabelle mit einer tal:replace-Anweisung in einem span
-Tag ersetzt haben. Diese Änderung erlaubt Ihnen, sowohl eine Abbildung als auch Text in der Tabellenzelle zu haben.
Ein Dateiarchiv mit Seitenvorlagen erstellen
Hier ist ein Beispiel dafür, wie man Seitenvorlagen mit Zope verwendet, um mit einer Vorlage, etwas Pythoncode und einigen Dateien ein einfaches Dateiarchiv zu erstellen.
Erstellen Sie zuerst einen Entwurf der Dateiarchivseite mit Hilfe Ihres HTML-Editors. Die Beispiele in diesem Kapitel wurden mit Amaya erzeugt. Sie müssen es mit dem Entwurf nicht übertreiben, er zeigt lediglich einige fiktive Angaben. Hier ist ein Entwurf eines Dateiarchivs, die eine Datei enthält:
Dateiarchiv Dateiarchiv
Klicken Sie auf eine der untenstehenden Dateien um sie herunterzuladen.
![]() ![]() |
Sie sind hier: ZWikiSeiten > ZBZPT Zopebuch: Inhaltsverzeichnis Kapitel 5: Zope-Seitenvorlagen verwendenSeitenvorlagen sind ein Werkzeug zum Erzeugen von Webseiten. Sie helfen Programmierern und Designern, beim erstellen dynamischer Webseiten für Zope-Web-Anwendungen zusammenzuarbeiten. Designer können sie verwenden, um Seiten zu pflegen, ohne ihre Werkzeuge aufgeben zu müssen, während sie die ersparte Arbeitszeit nutzen können, um jene Seiten in eine Anwendung einzubetten. In diesem Kapitel lernen Sie die Grundlagen von Seitenvorlagen, einschließlich dem, wie Sie sie in Ihrer Website verwenden können, um einfach dynamische Webseiten zu erstellen. In Kapitel 9, "Seitenvorlagen für Fortgeschrittene", erlernen Sie fortschrittliche Seitenvorlagen-Funktionen. Das Ziel von Seitenvorlagen ist es, Designern und Programmierern zu ermöglichen, leicht zusammenzuarbeiten. Ein Designer kann einen WYSIWYG-HTML-Editor verwenden, um eine Vorlage zu erstellen, dann kann sie ein Programmierer überarbeiten, um sie zum Teil einer Anwendung zu machen. Falls erforderlich, kann der Designer die Vorlage zurück in seinen Editor laden und weitere Änderungen an ihrer Struktur und Erscheinung vornehmen. Durch Ergreifen vernünftiger Maßnahmen, um die vom Programmierer vorgenommenen Änderungen zu erhalten, zerstört der Designer die Anwendung nicht. Seitenvorlagen verfolgen dieses Ziel durch das Anwenden von drei Prinzipien:
Eine Seitenvorlage ist wie ein Modell der Seiten, die sie generiert. Vor allem ist es eine gültige HTML-Seite. Zope-Seitenvorlagen gegenüber DTMLZope hat schon DTML. Warum braucht man eine andere Vorlagensprache? Zuallererst zielt DTML nicht auf HTML-Designer ab. Sobald eine Seite in eine Vorlage umgewandelt worden ist, ist es ungültiges HTML, was es schwierig macht, damit außerhalb der Anwendung zu arbeiten. Zweitens leidet DTML an dem fehlenden Trennung zwischen Darstellung, Logik und Inhalt (Daten). Dies vermindert die Skalierbarkeit von Bemühungen im Bereich Content-Management- und Website-Entwicklung, die diese Systeme verwenden. DTML kann Dinge, die Seitenvorlagen nicht können, wie das dynamische Erzeugen von E-Mail-Nachrichten (Seitenvorlagen können nur HTML und XML generieren). Also wird DTML nicht aussterben. Jedoch sehen wir, dass Seitenvorlagen fast alle den gesamten Bereich der HTML-/XML-Darstellung in Zope übernimmt. Wie Seitenvorlagen funktionierenSeitenvorlagen verwenden die Template Attribute Language (TAL). TAL besteht aus speziellen Tag-Attributen. So ähnlich könnte zum Beispiel ein dynamischer Seitentitel aussehen:
Das Attribut Alle TAL-Anweisungen bestehen aus Tag-Attributen deren Name mit Für den HTML-Designer, der ein WYSIWYG-Werkzeug verwendet, ist das dynamische Titel Beispiel völlig gültiges HTML und wird im Editor so dargestellt, wie ein Titel aussehen sollte. Mit anderen Worten: Seitenvorlagen arbeiten gut mit Bearbeitungswerkzeugen zusammen. Dieses Beispiel demonstriert auch das Prinzip "Was man sieht, ist dem, was man bekommt, sehr ähnlich". Wenn Sie die Vorlage in einem Editor betrachten, wirkt der Titel-Text als Platzhalter für den dynamischen Titeltext. Die Vorlage bietet ein Beispiel dafür, wie generierte Dokumente aussehen. Wenn diese Vorlage in Zope gespeichert und von einem Benutzer betrachtet wird, wandelt Zope den Beispiel-Inhalt in dynamischen Inhalt und ersetzt "Seitentitel" durch das, was auch immer "here/title" liefert. In diesem Fall liefert "here/title" den Titel des Objekts auf das die Vorlage angewendet wird. Diese Ersetzung wird dynamisch durchgeführt, wenn die Vorlage betrachtet wird. Es gibt Vorlagenanweisungen für das Ersetzen von ganzen Tags, deren Inhalten oder lediglich einiger ihrer Attribute. Sie können ein Tag mehrmals wiederholen oder es ganz weglassen. Sie können Teile mehrerer Vorlagen kombinieren und eine einfache Fehlerbehandlung festlegen. All diese Fähigkeiten werden verwendet, um Dokumentstrukturen zu generieren. Trotz dieser Fähigkeiten können Sie keine Unterroutinen oder Klassen erstellen, komplexe Ablaufsteuerungen durchführen oder auf einfache Weise komplexe Algorithmen ausdrücken. Für diese Aufgaben sollten Sie python-basierte Skripte oder Anwendungskomponenten verwenden. Die Seitenvorlagensprache ist absichtlich nicht so mächtig und allgemein verwendbar, wie sie sein konnte. Sie ist dazu bestimmt, innerhalb eines Rahmenwerks (wie etwa Zope) verwendet zu werden, bei dem andere Objekte die Geschäftslogik verarbeiten und für Aufgaben verwendet werden, die nicht mit dem Seitenlayout zusammenhängen. Die Vorlagensprache wäre zum Beispiel nützlich, um eine Rechnungsseite aufzubauen, indem je eine Zeile pro Einzelposten erzeugt wird und Beschreibung, Menge, Preis usw. in den Text jeder Zeile eingefügt wird. Sie würde dazu verwendet werden, um den Rechnungseintrag in einer Datenbank zu erzeugen oder mit einer Einrichtung zur Kreditkartenverarbeitung zu interagieren. Seitenvorlagen erstellenBeim Entwerfen von Seiten verwendet man wahrscheinlich FTP oder WebDAV statt dem Zope-Managment-Interface (ZMI) um Seitenvorlagen zu erstellen und zu bearbeiten. Informationen zum Bearbeiten von Seitenvorlagen über das Netz erhalten Sie später in diesem Kapitel, im Abschnitt "FTP und WebDAV verwenden". Für die kleinen Beispiele in diesem Kapitel ist einfacher das ZMI zu benutzen. Verwenden Sie Ihren Web-Browser, um sich als Manager im Zope-Managment-Interface anzumelden. Suchen Sie sich einen Ordner in dem Sie arbeiten möchten (Der Wurzelordner root ist in Ordnung) und wählen Sie "Page Template" (Seitenvorlage) aus der Produktauswahlliste. Geben Sie "einfache_seite" in das Feld Id des Erstellformulars ein und klicken Sie dann auf die Schaltfläche "Add and Edit" ("Hinzufügen und Bearbeiten"). Sie sollten jetzt die Hauptbearbeitungsseite der neuen Seitenvorlage sehen. Der Titel (Title) ist leer, der Inhaltstyp (Content-Type) ist Lassen Sie uns nun eine einfache dynamische Seiten erstellen! Geben Sie den Text "eine einfache Seite" in das Feld Title ein. Ändern Sie den Vorlagetext danach so ab, dass er folgendermaßen aussieht:
Drücken Sie jetzt die Schaltfläche Save Changes (Änderungen speichern). Zope sollte eine Mitteilung anzeigen die bestätigt, dass Ihre Änderungen gespeichert wurden. Falls ein HTML-Kommentar in den Vorlagentext eingefügt wird, der mit Klicken Sie auf den Reiter Test. Sie sollten eine Seite sehen, auf der oben "Dies ist eine einfache Seite" steht. Beachten Sie, dass der Text noch nicht formatiert ist. Nichts ist fettgedruckt. Gehen Sie zurück und klicken Sie auf den Verweis Browse HTML source (HTML-Quelltext betrachten) unter dem Feld Content-Type. Daraufhin wird Ihnen der uninterpretierte Quelltext der Vorlage angezeigt. Sie sollten den Text "Dies ist der Titel" sehen. Gehen Sie wieder zurück, sodass Sie das Beispiel weiter bearbeiten können. Das Feld Content-Type erlaubt Ihnen den Inhaltstyp Ihrer Seite festzulegen. Normalerweise werden Sie den Inhaltstyp Wenn man den Inhaltstyp auf Die Funktion Expand macros with editing ist in Kapitel 9 "Seitenvorlagen für Fortgeschrittene" beschrieben. Einfache AusdrückeDer Ausdruck "template/title" in Ihrer einfachen Seitenvorlage ist ein Pfadausdruck. Dies ist der gängigste Ausdruckstyp. Es gibt mehrere andere Arten von Ausdrücken die durch den Standard "TAL Expression Syntax" (TALES) definiert werden. Für weitere Informationen über TALES sehen Sie in Anhang C, "Zope Seitenvorlagen verweisen" nach. Der Pfadausdruck "template/title" holt die Eigenschaft
Jeder Pfad beginnt mit einem Variablennamen. Wenn die Variable den gewünschten Wert enthält, belassen Sie es hierbei. Ansonsten fügen Sie einen Schrägstrich ('/') hinzu und den Namen eines Unterobjekts oder einer Eigenschaft. Es kann sein, dass Sie sich Ihren Weg durch mehrere Unterobjekte bahnen müssen, um zu dem Wert zu kommen, den Sie suchen. Zope definiert einen kleinen Satz an eingebauten Variablen wie Text einfügenIn Ihrer Vorlage "einfache_seite" verwendeten Sie die Anweisung Um dynamischen Text in einen anderen Text zu setzen, verwenden Sie normalerweise
Das Tag
Wenn Sie Text in ein Tag einfügen, aber das Tag selbst unbeeinflusst lassen wollen, verwenden Sie die Anweisung
Wenn Sie den Reiter "Test" in einem neuen Browser-Fenster öffnen, wird der Titel des Fensters "eine einfache Seite" sein. Wenn Sie den Quelltext der Seite betrachten, sehen Sie, in etwa so etwas:
Zope fügte den Titel Ihrer Vorlage ins Sich wiederholende StrukturenLassen Sie uns jetzt Ihrer Seite etwas Kontext in Form einer Liste der Objekte geben, die sich im selben Ordner wie die Vorlage befinden. Sie werden eine Tabelle erstellen, die eine nummerierte Zeile für jedes Objekt und Spalten für die Id, den Metatyp und den Titel besitzt. Fügen Sie dem unteren Teil Ihrer Beispielvorlage diese Zeilen hinzu:
Die Anweisung Sie können jeden beleiebigen Namen für die Wiederholungsvariable verwenden ("item" ist nur ein Beispiel), solange er mit einem Buchstaben beginnt und nur Buchstaben, Ziffern und Unterstriche ('_') enthält. Die Wiederholungsvariable wird nur im Wiederholungs-Tag definiert. Wenn Sie versuchen, sie über- oder unterhalb des Tags Sie können den Namen der Wiederholungsvariable auch verwenden, um Informationen über die gegenwärtige Wiederholung zu bekommen. Indem Sie ihn nach der standardmäßig festegelegten Variablen Da eine Betrachten Sie jetzt die Seite und achten Sie darauf, wie sie all die Objekte im selben Ordner wie die Vorlage auflistet. Versuchen Sie, dem Ordner Objekte hinzuzufügen oder zu löschen, und achten Sie darauf, wie die Seite diese Änderungen wiedergibt. Bedingte ElementeDurch das Verwenden von Seitenvorlagen können Sie Ihre Umgebung dynamisch abfragen und selektiv Text je nach bestimmten Bedingungen einfügen. Zum Beispiel könnten Sie spezielle Informationen als Antwort auf einen Cookie anzeigen:
Dieser Absatz wird nur in die Ausgabe miteinbezogen, wenn einen Cookie namens Mit Hilfe der Anweisung Eine andere häufige Anwendung von Bedingungen ist es, eine Folge testen, um zu sehen, ob sie leer ist, bevor Sie über sie iterieren. Zum Beispiel haben Sie im letzten Abschnitt gesehen, wie man eine Tabelle erstellt, indem man über eine Sammlung von Objekten iteriert. Hier sehen Sie, wie man der Seite man eine Überprüfung hinzufügen kann, so dass, wenn die Liste von Objekten leer ist, keine Tabelle gezeichnet wird:
Wenn der Ausdruck Attribute ändernDie meisten, wenn nicht alle, der von Ihrer Vorlage aufgelisteten Objekte haben eine |
![]() |
Name | Typ | Größe | Zuletzt geändert |
Beispiel.tgz | application/x-gzip-compressed | 22 K | 2001/09/17 |
Melden Sie sich jetzt an Ihrem Zope an und erzeugen Sie einen Ordner namens Dateiarchiv
. Erstellen Sie in diesem Ordner eine index_html
genannte Seitenvorlage, indem Sie Page Template
in der Produktauswahlliste wählen, als Id index_html
im Formular angeben und auf Add (Hinzufügen) klicken.
Speichern Sie jetzt mit Ihrem HTML-Editor den obigen HTML-Code in den URL der Seitenvorlage index_html
, gefolgt von /source.html
, zum Beispiel http://localhost:8080/DateiArchiv/index_html/source.html
. Achten Sie darauf, dass der URL zum Speichern der Seite index_html
mit source.html
endet. Da Seitenvorlagen dynamisch sind, benötigen Sie eine Möglichkeit, den Quelltext der Vorlage zu bearbeiten, der noch nicht durch die Seitenvorlagensprache interpretiert wurde. Das Anhängen von source.html
an eine Seitenvorlage, gibt Ihnen diesen Quelltext. Beachten Sie, dass, wenn der Inhaltstyp Ihrer Seite text/xml
ist, Sie source.xml
statt source.html
verwenden müssen.
Nun, da Sie die Vorlage gespeichert haben, können Sie zu Zope zurückgehen und auf index_html
klicken und dann auf dessen Reiter Test klicken, um die Vorlage zu betrachten. Sie sieht genauso aus wie der Entwurf, also läuft alles gut.
Lassen Sie uns die oben genannte HTML-Seite etwas aufbohren und ihr ein bisschen dynamische Zauberei beibringen. Zuerst wollen wir, dass der Titel der Vorlage dynamisch ist. In Zope werden Sie bemerken, dass die Seitenvorlage ein Formularfeld namens title hat, das Sie ausfüllen können. Statt statischem HTML, wollen wir, dass Zope den Seitenvorlagentitel dynamisch in die wiedergegebene Fassung der Vorlage einfügt. Hier sehen Sie wie:
...Dateiarchiv ...Dateiarchiv
...
Gehen Sie jetzt zu Zope und ändern Sie den Titel der Seitenvorlage index_html
ändern. Klicken Sie, nach dem Speichern dieser Änderung, auf den Reiter Test. Wie Sie sehen können, hat die Seitenvorlage den Titel des Vorlagenobjekts dynamisch in die Ausgabe der Vorlage eingefügt.
Beachten Sie das neue Tag-Attribut content
im XML-Namensraum tal
. Dieses Attribut bedeutet "den Inhalt (content) dieses Tags durch die Variable 'template/title' ersetzen." In diesem Fall ist template/title
der Titel der Seitenvorlage index_html
.
Das nächste Stück Zauberei soll eine dynamische Dateiliste aufbauen, die Ihnen alle Dateiobjekte im Ordner Dateiarchiv
zeigt.
Um anfangen zu können, müssen Sie nur eine Zeile Python schreiben. Gehen Sie zum Ordner Dateiarchiv
und erstellen Sie ein Script (Python)
in diesem Ordner. Geben Sie dem Skript die Id dateien
und klicken Sie auf Add and Edit (Hinzufügen und Bearbeiten). Ändern Sie das Skript so ab,, dass es den folgenden Pythoncode enthält:
## Script (Python) "dateien" ## return container.objectValues('File')
Dies gibt eine Liste von Datei (File)-Objekten im Ordner Dateiarchiv zurück. Bearbeiten Sie Jetzt Ihre Seitenvorlage index_html
und fügen Sie Ihrem Entwurf noch einige tal
-Attribute hinzu:
... Beispiel.tgz application/x-gzip-compressed 22 K 2001/09/17 ...
Der interessante Teil daran ist das Attribut tal:repeat
im HTML-Tag tr
. Dieses Attribut veranlasst die Vorlage dazu, über die Werte zu laufen (zu iterieren), die von "container/dateien" (das Pythonskript das Sie erstellt haben) zurückgegeben wurden, und eine neue Tabellenzeile für jede dieser Dateien zu erstellen. Während jeder Wiederholung wird dem gegenwärtigen Dateiobjekt über das gerade iteriert wird, die Name item
zugeteilt.
Die Zellen jeder Zeile haben alle tal:content
-Attribute, die die Daten beschreiben, die in jede Zelle kommen sollen. Während jeder Wiederholung der Tabellenzeilenschleife ersetzen die Id, der Inhaltstyp, die Größe und das Änderungsdatum die fiktiven Daten in den Zeilen. Beachten Sie auch, wie der Hypertext-Verweis dynamisch auf die gegenwärtige Datei zeigt, indem mit Hilfe von tal:attributes
das Attribut href
überschrieben wird.
Diese Daten stammen vom Objekt item
, durch das Aufrufen von Zope-API-Methoden darauf, weil wir wissen, dass es ein File-Objekt ist. Die Methoden item/getId
, item/content_type
, item/getSize
, item/bobobase_modification_time
sind alle Standard-API-Funktionen, die in Zopes Online-Hilfesystem dokumentiert sind.
Gehen Sie zu Zope und testen sie dieses Skript, indem Sie zuerst einige Dateien in den Ordner Dateiarchiv
hochladen. Dies geschieht durch Auswählen von File
in der Produktauswahlliste und das Klicken auf die Schaltfläche upload
(hochladen) auf der nächsten Seite. Nach dem Hochladen Ihrer Datei können Sie einfach auf Add (hinzufügen) klicken. Wenn Sie keine Id angeben, dann wird der Dateiname der Datei verwendet, die Sie hochladen.
Nach dem Sie einige Dateien hochgeladen haben, gehen Sie zur Seitenvorlage index_html
und klicken Sie auf den Reiter Test. Jetzt können Sie sehen, dass die Seitenvorlage ein sehr einfaches Dateiarchiv dargestellt hat, mit nur wenigen Änderungen an HTML-Tag-Attributen.
Es gibt einige kosmetische Probleme an dem Dateiarchiv, so wie es jetzt ist. Die Darstellungen von Größe und Datum sind nicht sehr hübsch und passen nicht zum Format des fiktiven Inhalts. Sie möchten, dass die Größe der Dateien in K oder MB statt Bytes angezeigt wird. Hier ist eine python-basiertes Skript, das Sie dafür verwenden können:
## Script (Python) "datei_groesse" ## """ Eine Zeichenkette zurueckgeben, die die Groesse einer Datei beschreibt. """ bytes=context.getSize() k=bytes/1024.0 mb=bytes/1048576.0 if mb > 1: return "%.2f MB" % mb if k > 1: return "%d K" % k return "%d Bytes" % bytes
Erstellen Sie dieses Skript mit der Id datei_groesse
in Ihrem Ordner Dateiarchiv
. Es berechnet die Größe einer Datei in Kilobytes und Megabytes und gibt eine entsprechende Zeichenkette zurück, die die Größe der Datei beschreibt. Jetzt können Sie das Skript statt des Ausdrucks item/getSize
verwenden:
... 22 K ...
Sie können auch die Datumsformatierungsprobleme mit ein bisschen Python lösen. Erstellen Sie ein Skript mit dem Namen datei_datum
in Ihrem Ordner Dateiarchiv
:
## Script (Python) "datei_datum" ## """ Das Aenderungsdatum als Zeichenkette der Form YYYY/MM/DD zurueckgeben """ datum=context.bobobase_modification_time() return "%s/%s/%s" % (datum.year(), datum.mm(), datum.day())
Ersetzen Sie jetzt den Ausdruck item/bobobase_modification_time
durch einen Verweis auf dieses Skript:
... 2001/09/17 ...
Herzlichen Glückwunsch, Sie haben erfolgreich einen Entwurf genommen und ihn zu einer dynamischen Seitenvorlage gemacht. Dieses Beispiel verdeutlicht, wie gut Seitenvorlagen als "Darstellungsschicht" in Ihren Anwendungen funktionieren. Die Seitenvorlagen stellen die Anwendungslogik (die python-basierten Skripte) dar und die Anwendungslogik arbeitet mit den Daten in Ihrer Site (den Dateien).
Bearbeiten entfernter Dateien mit FTP und WebDAV
Sie können Seitenvorlagen über das Netz sowohl mit FTP und WebDAV bearbeiten, als auch über das Veröffentlichen per HTTP PUT. Mit Hilfe dieser Methoden können Sie Seitenvorlagen verwenden, ohne fortgeschrittene WYSIWYG-Editoren wie DreamWeaver verlassen zu müssen.
Der vorherige Abschnitt hat Ihnen gezeigt, wie man eine Seite bearbeiten und Amaya über das Netz verwenden kann, das HTTP PUT verwendet, um Seiten hochzuladen. Sie können dasselbe mit FTP und WebDAV mit Hilfe derselben Schritte machen.
- Erstellen Sie eine Seitenvorlage im Zope-Management-Interface. Sie können ihr eine beliebige Dateinamenserweiterung geben. Viele Leute bevorzugen
.html
, während andere.zpt
bevorzugen. Beachten Sie, dass einige Namen wieindex_html
spezielle Bedeutungen zu Zope haben. - Fragen Sie die Datei mit Hilfe des URL Ihrer Seitenvorlage plus
/source.html
oder/source.xml
ab. Dies liefert Ihnen den Quelltext Ihrer Seitenvorlage. - Bearbeiten Sie Ihre Datei mit Ihrem Editor und speichern Sie sie. Wenn Sie sie speichern, sollten Sie denselben Quellen-URL verwenden, den Sie verwendet haben, um sie abzufragen.
- Laden Sie Ihre Seite wahlweise neu, nachdem Sie sie bearbeitet haben, um sie auf Fehlerkommentare zu überprüfen. Sehen Sie im nächsten Abschnitt für weitere Details über Fehlerbereinigung nach.
In späteren Versionen von Zope werden Sie wahrscheinlich in der Lage sein, Seitenvorlagen ohne das Zope-Management-Interface erstellen zu können.
Fehler bereinigen und testen
Zope hilft Ihnen Fehler in Ihren Seitenvorlagen aufzuspüren und zu korrigieren. Zope bemerkt Probleme zu zwei verschiedenen Zeitpunkten: wenn Sie eine Seitenvorlage bearbeiten und wenn Sie eine Seitenvorlage betrachten. Wenn Sie bearbeiten fängt Zope andere Arten von Problemen ab, als wenn Sie eine Seitenvorlage betrachten..
Sie sind wahrscheinlich schon mit Fehlerkommentaren vertraut, die Zope in Ihre Seitenvorlagen einfügt, wenn es auf Probleme trifft,. Diese Kommentare zeigen Ihnen Probleme an, die Zope findet, während Sie Ihre Vorlagen bearbeiten. Die Art von Problemen, die Zope findet, wenn Sie bearbeiten, sind hauptsächlich Fehler in Ihren TAL-Anweisungen. Zum Beispiel:
Diese Diagnosemeldung teilt Ihnen mit, dass Sie versehentlich tal:contents an
statt tal:content
in Zeile 10 Ihrer Vorlage verwendet haben. Andere Diagnosemeldungen beschreiben Ihnen Probleme mit Ihren Vorlagenausdrücken und Makros.
Wenn Sie das Zope-Management-Interface verwenden, um Seitenvorlagen zu bearbeiten, ist es leicht, diese Diagnosemeldungen zu entdecken. Wenn Sie jedoch WebDAV oder FTP verwenden, kann man diese Nachrichten leicht übersehen. Falls Sie zum Beispiel eine Vorlage mit FTP auf Zope sichern, erhalten Sie keinen FTP-Fehler, der Ihnen das Problem beschreibt. Vielmehr müssen Sie die Vorlage von Zope neu laden, um die Diagnosemeldung zu sehen. Wenn man FTP und WebDAV verwendet, ist es gut, Vorlagen neu zu laden, nachdem Sie sie bearbeitet haben, um sich zu vergewissern, dass sie keine Diagnosemeldungen enthalten.
Wenn Sie die Diagnosemeldung nicht bemerken und versuchen, eine Vorlage mit Problemen darzustellen, sehen Sie eine Nachricht wie diese:
Error Type: RuntimeError Error Value: Page Template hallo.html has errors.
Das ist Ihr Signal, die Vorlage neu zu laden und die Diagnosemeldung zu überprüfen.
Zusätzlich zu Diagnosemeldungen beim Bearbeiten bekommen Sie gelegentlich normale Zope-Fehler, wenn Sie eine Seitenvorlage betrachten. Diese Probleme werden normalerweise durch Probleme in Ihren Vorlagenausdrücken verursacht. Zum Beispiel könnten Sie einen Fehler bekommen, wenn ein Ausdruck eine Variable nicht ausfindig machen kann:
Error Type: Undefined Error Value: "einhorn" not found in "here/einhorn"
Diese Fehlermeldung teilt Ihnen mit, dass die Variable einhorn
nicht gefunden werden kann, auf die im Ausdruck here/einhorn
verwiesen wird. Um Ihnen zu helfen, herauszufinden, was falsch lief, bezieht Zope Angaben über die Umgebung ins Traceback ein. Wenn Sie sich im Debugging-Modus befinden, erhalten Sie diese Angaben unten auf der Fehlerseite. Sehen Sie sich ansonsten den Quelltext der Fehlerseite an, um das Traceback zu sehen. Das Traceback beinhaltet Angaben über die Umgebung:
... 'here':, 'modules': , 'nothing': None, 'options': {'args': ()}, 'request': ... 'root': , 'template': , 'traverse_subpath': [], 'user': amos}) ...
Diese Angaben sind ein wenig kryptisch, aber mit etwas Detektivarbeit können sie Ihnen helfen, zu begreifen, was falsch lief. In diesem Fall sagen sie uns, dass die Variable here
eine "Application instance" (Anwendungsinstanz) ist. Dies bedeutet, dass es der Wurzelordner von Zope ist, (beachten Sie, dass die Variable root
dieselbe "Application instance" ist). Vielleicht ist das Problem, dass Sie die Vorlage auf einen Ordner anwenden wollten, der eine Eigenschaft namens einhorn
besitzt. Das Traceback liefert nicht viel Hilfe, aber es kann Ihnen manchmal weiterhelfen.
XML-Vorlagen
Ein anderes Beispiel für die Flexibilität von Seitenvorlagen ist, dass sie sowohl XML als auch HTML dynamisch wiedergeben können. Zum Beispiel haben Sie in Kapitel 5, "Erstellung einfacher Zope-Anwendungen" den folgenden XML-Code erzeugt:
Mein Kommentar Ich mag deine Webseite Bitte keine Blink-Tags
Dieser XML-Code wurde durch Iterieren über alle DTML-Dokumente in einem Ordner und das Einfügen ihres Quelltexts in kommentar
-Elemente geschaffen. In diesem Abschnitt zeigen wir Ihnen, wie man Seitenvorlagen dazu verwendet, um den gleichen XML-Code zu erzeugen.
Erstellen Sie eine neue Seitenvorlage namens "eintraege.xml" in Ihrem Gästebuch-Ordner mit dem folgenden Inhalt:
Hierher kommt der Kommentar...
Vergewissern Sie sich, dass Sie den Inhaltstyp auf text/xml
stellen. Klicken Sie auf Save Changes und den Reiter Test. Wenn Sie Netscape verwenden, fordert es Sie dazu auf, ein XML-Dokument herunterzuladen, wenn Sie MSIE 5 oder höher verwenden, können Sie das XML Dokument im Browser betrachten.
Beachten sie wie die Anweisung tal:repeat
über alle DTML-Dokumente iteriert. Die Anweisung tal:content
fügt den Quelltext jedes Dokuments in das Element kommentar
ein. Das Attribut xmlns:tal
ist eine XML-Namensraum-Anweisung. Es sagt Zope, dass das Namen die mit tal
beginnen, Seitenvorlagenbefehle sind. Siehe Anhang C, "Zope-Page-Templates-Referenz" für weitere Informationen über die XML-Namensräume TAL- und METAL.
XML mit Seitenvorlagen zu erzeugen, ist fast genauso wie das Erzeugen von HTML. Der wichtigste Unterschied ist, dass Sie explizite XML-Namensraum-Deklarationen verwenden müssen. Ein anderer Unterschied ist, dass Sie die Inhaltstyp auf text/xml
, oder wie auch immer der Inhaltstyp für Ihr XML sein soll, stellen sollten. Der letzte Unterschied ist, dass Sie sich den Quelltext einer XML-Vorlage durch Gehen zu source.xml
statt source.html
ansehen können.
Vorlagen mit Inhalt verwenden
Im Allgemeinen unterstützt Zope Inhalts-, Darstellungs- und Logikkomponenten. Seitenvorlagen sind Darstellungskomponenten, und sie können verwendet werden, um Inhaltskomponenten anzuzeigen.
Zope 2.5 wird mit mehreren Inhaltsbestandteilen ausgeliefert: ZSQL-Methoden, Files und Images. DTML-Dokumente und -Methoden sind nicht wirklich reine Inhaltsbestandteile, da sie Inhalt beinhalten und DTML-Code ausführen können. Zur Zeit besitzt Zope standardmäßig kein gutes, universal einsetzbares Inhaltsobjekt. Sie können Files für Textinhalt verwenden, da Sie den Inhalt von Files bearbeiten können, wenn die Datei weniger als 64 K groß ist und Text enthält. Jedoch ist das File-Objekt ziemlich spartanisch.
Zopes Content Management Framework (CMF) löst dieses Problem, indem es ein Sortiment von vielfältigen Inhaltskomponenten bietet. Das CMF ist Zopes Content-Management-Erweiterung. Es führt viele Arten von Verbesserungen ein, einschließlich Workflow, Skins und Inhaltsobjekte ein. Das CMF verwendet Seitenvorlagen ausgiebig. Eine spätere Version von Zope wird das CMF wahrscheinlich mit beinhalten.
Zusammenfassung
Zope-Seitenvorlagen helfen Ihnen, Webseiten für Ihre Web-Anwendungen zu erstellen. Vorlagen erleichtern Ihnen, normale HTML-Werkzeuge und -Techniken zu verwenden, um Webseiten zu erstellen. Sie bieten auch bequeme Anpassungsmöglichkeiten, die es Ihnen erlauben, sie in Ihre Anwendungen einzubinden. Seitenvorlagen helfen Gestaltern und Programmierern, zusammen zu arbeiten, um Web-Anwendungen zu produzieren. In Kapitel 9, "Seitenvorlagen für Fortgeschrittene" werden Sie etwas über mächtige Techniken für Vorlagen lernen, wie Python-Ausdrücke und Makros.