Seite 1 von 1

Verfasst: Donnerstag 22. Januar 2009, 14:26
von gerold
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
:-)

Verfasst: Montag 26. Januar 2009, 16:47
von mitsuhiko
@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>

Verfasst: Dienstag 27. Januar 2009, 09:30
von gerold
Hallo mitsuhiko!

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

lg
Gerold
:-)