Welchen Sinn macht eine Templateengine?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Donnerstag 22. Januar 2009, 14:26

Hallo!

Mir gefällt Cheetah einfach gut. Deshalb schlage ich es gerne vor.

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-

from Cheetah.Template import Template

vorlagentext = """
<table>
  #for $line in $lines
    <tr>
      #for $item in $line
        <td>$item</td>
      #end for
    </tr>
  #end for
</table>
"""

lines = [
    ["Halvar", "der Wickinger"],
    ["Uhudler", "der Wein"],
    ["Stiegl", "das Bier"],
    ["Hansi", "der Postbote"],
    ["ATtiny13", "der AVR Mikrocontroller"],
    ["Python", "die Programmiersprache"],
]

template = Template(vorlagentext)
template.lines = lines
print template
Und das kommt dabei heraus:

Code: Alles auswählen

<table>
    <tr>
        <td>Halvar</td>
        <td>der Wickinger</td>
    </tr>
    <tr>
        <td>Uhudler</td>
        <td>der Wein</td>
    </tr>
    <tr>
        <td>Stiegl</td>
        <td>das Bier</td>
    </tr>
    <tr>
        <td>Hansi</td>
        <td>der Postbote</td>
    </tr>
    <tr>
        <td>ATtiny13</td>
        <td>der AVR Mikrocontroller</td>
    </tr>
    <tr>
        <td>Python</td>
        <td>die Programmiersprache</td>
    </tr>
</table>
Und im normalen Leben hällt man den Vorlagencode in einer Textdatei. Dann kann dieser unabhängig vom Programmcode verändert werden. Der Programmcode ist für den Programmierer und der Vorlagencode für den Designer.

EDIT:

Man kann in dieses Beispiel auch Vererbung einbauen. Natürlich ist es schlechter Stil, den Vorlagentext in das Programm direkt einzubauen. Aber ich dachte mir, so erkennt man im Beispiel vielleicht die Zusammenhänge besser.

Programm --> http://paste.pocoo.org/show/100807/
Ergebnis --> http://paste.pocoo.org/show/100810/

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Montag 26. Januar 2009, 16:47

@Gerald:

Code: Alles auswählen

>>> from jinja2 import Environment
>>> env = Environment(line_statement_prefix="#",
..     variable_start_string="${", variable_end_string="}")
>>> tmpl = env.from_string("""\
... <table>
...   # for line in lines
...     <tr>
...       # for item in line
...         <td>${item}</td>
...       # endfor
...     </tr>
...   # endfor
... </table>""")
>>> print tmpl.render(lines=[
...     ["Halvar", "der Wickinger"],
...     ["Uhudler", "der Wein"],
...     ["Stiegl", "das Bier"],
...     ["Hansi", "der Postbote"],
...     ["ATtiny13", "der AVR Mikrocontroller"],
...     ["Python", "die Programmiersprache"],
... ])
<table>
    <tr>
        <td>Halvar</td>
        <td>der Wickinger</td>
    </tr>
    <tr>
        <td>Uhudler</td>
        <td>der Wein</td>
    </tr>
    <tr>
        <td>Stiegl</td>
        <td>das Bier</td>
    </tr>
    <tr>
        <td>Hansi</td>
        <td>der Postbote</td>
    </tr>
    <tr>
        <td>ATtiny13</td>
        <td>der AVR Mikrocontroller</td>
    </tr>
    <tr>
        <td>Python</td>
        <td>die Programmiersprache</td>
    </tr>
</table>
TUFKAB – the user formerly known as blackbird
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Dienstag 27. Januar 2009, 09:30

Hallo mitsuhiko!

Ja, so lässt es sich auch mit Jinja leben. :D

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten