Des öfteren steht man ja vor dem Problem das man eine kleine Seite mit ungefähr 5-20 Seiten machen will. Da das ganze auch noch in sauberem xhtml ohne Frames geschehen soll, steht man vor dem Problem bei einer kleinen Änderrung am Design alle Seiten editieren zu müssen. Bei 5 Seiten geht das vieleicht ja gerade noch so, aber 20 Seiten verzweifelt man ja dann doch sehr schnell.
Und genau jetzt kommt die Schlange mit dem Geparden ins Spiel. Cheetah ermöglicht es einem eine Vorlage mit Inhalt zu füllen.
Jetzt aber zum eigentlichen Spiel. Zuerst muss man python und dann cheetah installieren. Dann legt man eine Verzeichnisstruktur die so aussieht:
\--. | \--output | \--template_files
Dann erstellt man das python script, das die Drecksarbeit erledigt, ich habe es genSite.py gennant:
- from Cheetah.Template import Template
- import sys
- """
- Die Einstellungen:
- template - Die Vorlagendatei, so sehen die Seiten später aus.
- output - Hier werden die Seiten hingeneriert
- templateDir - Hier sind die Inhaltsdateien drinne
- """
- template = "template.html"
- output = "output/"
- templateDir = "template_files/"
- myFile = open(template, 'r')
- templateDef = myFile.read()
- templateFile = sys.argv[1]
- templateFileContent = (open(templateDir + sys.argv[1] + '.html')).read()
- title = (templateFile.split("\n"))[0]
- inhalt = (templateFile.split("\n",1))[1]
- nameSpace = {'title': title, 'inhalt': inhalt}
- t = Template(templateDef, searchList=[nameSpace])
- myTemplate = open(output + sys.argv[1] + ".html", "w")
- myTemplate.write(str(t))
Mein Konzept für die Inhaltsdateien sieht es vor, dort eine Überschrift und den eigentlichen Inhalt zu hinterlegen. Die erste Zeile ist die Überschrift und die nächste bis zum Ende ist der Inhalt. Die Dateinamen müssen auf .html enden.
Nächster Punkt ist die Vorlage an sich. Die Schlüsselwörter für die Überschrift ist $title und für den Inhalt $content. So könnte zum Beispiel eine Vorlage aussehen:
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
- <head>
- <title>$title</title>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <link rel="stylesheet" type="text/css" href="style.css" />
- </head>
- <body>
- $content
- </body>
- </html>
Nun erstellt man eine HalloWelt.html im Ordner template_files mit einem beliebigen Inhalt. Jetzt ruft man das Script auf:
python genSite.py HalloWelt
Nun sollte sich im output-Ordner eine Datei mit dem Titel HalloWelt.html befinden, die ungefähr so aussieht:
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
- <head>
- <title>Hallo Welt</title>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <link rel="stylesheet" type="text/css" href="style.css" />
- </head>
- <body>
- Ich bin eine Hallo Welt Seite!
- </body>
- </html>
Zum Schluss empfiehlt es sich noch ein kleines Script anzulegen in dem alle Dateien aufgerufen werden, das könnte in bash-script so aussehen:
- #!/bin/bash
- echo "Erstelle HalloWelt"
- python gentemplate.py HalloWelt
Oder unter windows so:
- gentemplate.py HalloWelt

Morgen! Wenn ich das alles
Morgen!
Wenn ich das alles richtig verstanden habe (Du schreibst sehr kompliziert) dann brauche ich die Datei gensite.py mit folgendem Inhalt:
from Cheetah.Template import Template
import sys
template = "template.html"
output = "output/"
templateDir = "template_files/"
myFile = open(template, 'r')
templateDef = myFile.read()
templateFile = sys.argv[1]
templateFileContent = (open(templateDir + sys.argv[1] + '.html')).read()
title = (templateFile.split("\n"))[0]
inhalt = (templateFile.split("\n",1))[1]
nameSpace = {'title': title, 'inhalt': inhalt}
t = Template(templateDef, searchList=[nameSpace])
myTemplate = open(output + sys.argv[1] + ".html", "w")
myTemplate.write(str(t))
sowie die Datei HelloWelt.html mit diesem Inhalt:
HalloWelt!
und die Datei Template.html mit folgendem Inhalt:
"http://http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
$content
Wenn ich das alles mit python gensite.py HelloWelt ausführe, dann erhalte ich folgende Fehlermeldung:
Traceback (most recent call last):
File "gensite.py", line 12, in ?
inhalt = (templateFile.split("\n",1))[1]
IndexError: list index out of range
Wird denn dieses blog nicht
Wird denn dieses blog nicht mehr gepflegt? :jawdrop:
Aaaaaaaaaaaaaaaaaah,
:) Aaaaaaaaaaaaaaaaaah, wunderbar! Endlich ein fertiger Text der den Leser nicht mit diversen Rätseln stehen lässt. Danke.
Hallo Dirk, ich hoffe du
Hallo Dirk,
ich hoffe du kommst damit jetzt besser zurecht. Bei meinem Umstieg auf Drupal 5 hatte ich vergessen das vim color plugin zu installieren das dafür sorgt das der code so schön bunt erscheint.
Falls du noch Probleme haben solltest schreib einfach hier rein, dann schau ich mir das nochmal an.
HTH
Tim
They that sow in tears will reap in joy.
Post new comment