Die tägliche Ration Wahnsinn
Das offene Ohr Mein Icon
spacer
That's me, folks

Partnerprogramme

Buch24.de - Bücher versandkostenfrei

Abebooks.de - Antiquarische und gebrauchte Bücher

shirtcity.de  -  CLICK YOUR SHIRT

spacer spacer

Daily Link Icon Samstag, 9. März 2002

Eine einfache Template-Engine in Python

Templates erlauben es, die Trennung von Programmier-Logik und Design zu verwirklichen. Der Designer entwirft die HTML-Seiten und an die Stellen, wo der Content eingepflegt werden soll, werden nur Platzhalter angegeben. Platzhalter trifft man häufig in der Form <% platzhalter %> an.

Beliebte Template-Engines in Python sind die DTML, die Template-Engine von Zope und HTMLgen. DTML ist jedoch eine eigene Scriptsprache und so wird durch die Programmierlogik von DTML das Prinzip der Trennung von Design und Logik wieder durchbrochen. HTMLgen wiederum ist für viele einfache Aufgaben schlicht zu groß, außerdem scheint es zur Zeit nicht mehr gepflegt zu werden.

Da das Prinzip aber einfach ist, habe ich eine kleine, simple Template-Engine selber geschrieben.

import string

class HTMLTemplate:

   def __init__(self, template):
      f_in = open(template, "r")
      self.htmlText = f_in.read()
      f_in.close

   def substitute(self, **params):
      for arg in params:
         replaceString = "<% " + arg + " %>"
         self.htmlText = string.replace(self.htmlText,
                  replaceString, params[arg])

   def writeHTML(self, fileName):
      f_out = open(fileName, "w")
      f_out.write(self.htmlText)
      f_out.close()

if __name__ == "__main__":
   test = HTMLTemplate("test.template")
   test.substitute(name = "J&ouml;rg Kantel", wohnort = "Berlin")
   test.writeHTML("output.html")

Zuerst wird das Module string importiert. Dann die Klasse HTMLTemplate erzeugt. Der Konstruktor (__init__) macht nichts anderes, als den Text des Templates einzulesen und in einer internen Variabeln abzuspeichern.

Die eigentliche Substitution findet in der Funktion substitute() (wo denn auch sonst?) Smile statt. Die Funktion nutzt aus, daß mit **params einer Python-Funktion eine beliebige Anzahl von Schlüsselwort-Variablen übergeben werden kann, auf die intern als Liste von Dictionaries (für Perl-Programmierer: Hashes) zugegriffen wird.

Die letzte Funktion (writeHTML) macht genau das, was ihr Name sagt: Sie speichert die HTML-Datei ab und muß daher als Parameter den Namen (incl. Pfad) der zu generierenden HTML-Datei mitbekommen.

Die Zeilen ab if __name__ == "__main__": sind eine Testfunktion, die zeigt, wie diese neue Klasse funktioniert. Ich habe sie mit folgendem Template gefüttert:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<html>
<head>
   <title>Test-Datei</title>
   <meta name="generator" content="BBEdit 6.5">
</head>
<body bgcolor="#FFFFFF" text="#000000" link="#0000FF" alink="#00FF00" vlink="#FF00FF">
<p>
Mein Name ist <% name %> und ich wohne in <% wohnort %>. Und ich finde, <% wohnort %> ist eine sch&ouml;ne Stadt.</p>
</body>
</html>

Das Ergebnis könnt Ihr hier bewundern. Schlagt mich nicht, wegen des idiotischen Textes in der Test-Datei, mir fiel gerade nichts Besseres ein.

Aber generell ist das wieder ein Beispiel, wie man schon mit wenigen Zeilen eine doch recht mächtige Funktion in Python programmieren kann.

Python Icon   Script different!

PermaLink

8:55:42 PM | Perma Link Icon | Forum

Und ab...

Zebu ganz klein, Photo: Gabi Kantel, 22.04.2001

...in die Hundeschule. [Gabi meinte, ich sollte heute aus gegebenem Anlaß ein Jugendphoto von Zebu ins Netz stellen.]

8:20:19 AM | Perma Link Icon | Forum

MacCentral: OpenOSX publishes PHP 4.1.2 package. “Without typing a single UNIX command, the OpenOSX package will install PHP 4.1.2 and dependent libraries: PDF Lib 4.0.2, Libcurl, and Freetype 2.0.4.” [mac.scripting.com]

8:01:49 AM | Perma Link Icon | Forum

Macrobyte Resources: AttSearchEngine for Frontier and Radio UserLand is a search engine that indexes text and attributes. “AttSearchEngine is a developer’s tool. There’s no user interface, because it’s not a tool for users. You build the AttSearchEngine into your software or project.” [mac.scripting.com]

8:00:37 AM | Perma Link Icon | Forum

Radio Mug Den Preis würfelt Dave immer noch aus. DaveNet: Our Back-Door Sell. [Scripting News]

7:57:57 AM | Perma Link Icon | Forum

EFF-Mitbegründer John Perry Barlow über Datenschutz, Copyright und sogar Spam. [Nothing But The Truth] Ausdrucken!

7:54:33 AM | Perma Link Icon | Forum

Mana   »Patrick Breitenbach notes that the new ActiveBuddy SDK is out. He wants to build bots in Radio using UserTalk that provide services to AIM users.« [John Robb's Radio Weblog] Klingt interessant. Sollte ich mir an diesem Wochenende auch mal genauer anschauen.

7:51:00 AM | Perma Link Icon | Forum

[Für 3D Freaks]: Maya Personal Learning Edition available from iDisk. [MacCentral]

7:44:42 AM | Perma Link Icon | Forum

Was hat Dave hier vor Fragezeichen [Scripting News]

7:43:21 AM | Perma Link Icon | Forum

Sjoerd Visscher versucht, Radio UserLand mit Jabber zu verkuppeln. [Scripting News]

7:37:46 AM | Perma Link Icon | Forum

Das brauche ich nicht, meine Stammkneipe ist direkt gegenüber: Mini-PC fragt sich zur Kneipe durch. [heise online news]

7:34:29 AM | Perma Link Icon | Forum

Zur Geschichte des Internationalen Frauentags. [Leerlaufprozess]

7:31:31 AM | Perma Link Icon | Forum

[Für Mac Hacker]: According to an email posted by an Apple manager to the Cocoa-Dev list, Apple’s Cocoa API reference documentation is now content complete. [mac.scripting.com]

7:29:26 AM | Perma Link Icon | Forum


spacer spacer spacer spacer
March 2002
Sun Mon Tue Wed Thu Fri Sat
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
Feb   Apr

Interne Links:
 Startseite
 Über mich
 Über Gabi
 Credits
 Sitemap
 Archiv
 Linksammlung
 Gabi gucken
 Gabis lustiger Falthund
 Pythonmania
 Turn Your Radio On!
 Perl(en)
 JavaScript
 Programmiersprachen
 Mathematik
 VLP-Texte
 Ich habe gelesen
 Alles Kino
 Ausflüge & Reisen
 Bugastadt 2001
 Temporäre Gärten 2001
 Vermischtes
 Tom Tit
 Theater & Kabarett
 Icons
 Bild hochladen
 Wer linkt mich?

 RSS Icon

Andere & Awards
 Krit-Apfel 8/2000
 Wohin heute
 Netzwissenschaft
 Dr. Web
 Webobserver
 cognitive Architects
 nordwest net
 Die Welt
 voices
 Die Zeit
 Berliner Zeitung
 Tagesanzeiger.ch
 c't 2/2002

Unser Netzimperium
 Kantel-Chaos-Team
 Gabi
 Jörgs Zope-Site
 Tribute to John Brunner
 Der Rollberg
 Der alte SWR


Letzte Änderung: 01.04.2002; 8:59:19 Uhr | © Copyright: 2002 by Kantel-Chaos-Team | Kontakt: der@schockwellenreiter.de

This site is edited with Radio UserLand, the first personal Web Application server for Windows and Macintosh.  This site is made with a Apple Macintosh Computer and I'm proud about that.  This site was build with BBEdit. It don't sucks!  This site is HTML 4.01 compatible.  This site is made with Cascading Style Sheets.  Let iCab smile  Site Meter