Die Dokumentation von Ophelia enthält ein kleines Anwendungsbeispiel, das auf dieser Site installiert ist und im folgenden erläutert wird.
Das Beispiel besteht im wesentlichen aus folgenden Verzeichnissen und Dateien:
- static/
    - example.css
- foo/
        - baz.html
 
 
- ophelia_pages/
    - __init__
- index.html
- foo/
        - __init__
- index.html
- bar.html
 
 
Bei entsprechender Konfiguration des Servers (siehe die Installationshinweise) stellt es folgende Ressourcen zur Verfügung:
- /
- /foo/
- /foo/bar.html
- /foo/baz.html
- /example.css
  Dateien unter static/ werden so ausgeliefert, wie sie
  sind:
static/foo/baz.html
<html>
  <head>
    <title>baz</title>
  </head>
  <body>
    <p>
      This page was not built by Ophelia.
    </p>
  </body>
</html>
/foo/baz.html
  Die Ressource / wird dagegen aus Templates zusammengesetzt.
  Dazu führt Ophelia zuerst das Python-Skript
  in ophelia_pages/__init__ aus und verwendet das Template in der
  gleichen Datei als Grundlage für die ausgelieferte Seite. Skript und
  Template werden durch die Zeile <?xml?> voneinander
  getrennt:
ophelia_pages/__init__
site = __request__.site
<?xml?>
<!DOCTYPE html 
          PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <link rel="stylesheet" type="text/css" href=""
          tal:attributes="href string:${site}example.css"/>
    <title tal:content="title" />
  </head>
  <body>
    <h1 tal:content="title" />
    <div tal:replace="structure innerslot" />
  </body>
</html>
  Da diese Datei als Grundlage für jede aus Templates erstellte Seite des
  Beispiels dient, setzt das enthaltene Python-Skript nur eine
  Kontextvariable, die in jeder Seite benötigt wird: die Basis-URL des
  Beispiels. Die Kontextvariable title muß in einem anderen
  Python-Skript gesetzt werden. Den Inhalt von innerslot erstellt
  Ophelia selbst aus den weiteren verwendeten Templates.
  Da die URL / keine weiteren Pfadanteile enthält, wird als
  nächstes bereits die Datei ausgewertet, die den eigentlichen Inhalt der
  Seite beschreibt: ophelia_pages/index.html. Das Python-Skript
  in dieser Datei muß nun den Titel der Seite setzen, und das Template darf
  keinen weiteren innerslot enthalten.
ophelia_pages/index.html
title = "Ophelia example site"
<?xml?>
<p>
  This is the index page of the
  <a href="http://www.thomas-lotze.de/software/ophelia/">Ophelia</a>
  example site located at
  <a href="http://www.thomas-lotze.de/software/ophelia/example/">
    http://www.thomas-lotze.de/software/ophelia/example/</a>.
</p>
<p>
  Take a look at the <a href="foo/">foo</a>, <a href="foo/bar.html">foo/bar</a>,
  and <a href="foo/baz.html">foo/baz</a> pages.
</p>
/
  Um die Ressource /foo/ aufzubauen, muß Ophelia wiederum alle
  auf dem Pfad liegenden Dateien mit Namen __init__ auswerten:
  zuerst die bereits besprochene Datei ophelia_pages/__init__,
  und anschließend ophelia_pages/foo/__init__:
ophelia_pages/foo/__init__
<div class="boxed"
     tal:content="structure innerslot" />
  Diese Datei enthält nur ein Template, das als innerslot in das
  Haupttemplate eingesetzt wird. Andererseits fügt dieses Template selbst
  einen innerslot ein, der aus der nächsten behandelten Datei
  befüllt wird. Die Wirkung des Templates
  in ophelia_pages/foo/__init__ besteht darin, den Inhalt aller
  unterhalb von /foo/ liegenden Seiten in
  ein <div>-Element zu fassen, das per CSS einen Rahmen
  erhält.
  Die letzte Datei, die zur Ressource /foo/ beiträgt,
  ist ophelia_pages/foo/index.html. Sie enthält wiederum ein
  Python-Skript, das den Titel der Seite als Kontextvariable setzt, und ein
  Template ohne innerslot:
ophelia_pages/foo/index.html
title = "index page" <?xml?> <p> This is the index page of the foo folder. </p>
/foo/
  Für die Ressource /foo/bar.html wertet Ophelia
  dieselben __init__-Dateien aus wie für /foo/, da
  dieselben Verzeichnisse auf dem Pfad liegen. Lediglich die letzte
  betrachtete Datei ist eine andere:
ophelia_pages/foo/bar.html
import datetime title = "bar page" now = datetime.datetime.now() <?xml?> <p> This is the bar page of the foo folder. The current date and time is <span tal:replace="now" />. </p>
/foo/bar.html
  Vergleicht man ophelia_pages/foo/index.html
  mit ophelia_pages/foo/bar.html, so sieht man, daß mit Ophelia
  wirklich nur nicht-wiederkehrender Code geschrieben werden muß. Alle
  Gemeinsamkeiten zwischen /foo/ und /foo/bar.html
  wurden genau einmal in einer der __init__-Dateien festgehalten.
