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: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » 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.
Benutzeravatar
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Beitragvon mitsuhiko » 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: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » 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.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder