OK, der Validator muss warten, heute hab ich erst einmal Support für sehr einfache Templates hinzu gefügt (+150 Zeilen, langsam wird mein 'micro' Framework etwas groß...)
Einen extra-thread dazu gibts
hier
Beispiel:
Code: Alles auswählen
@route('/test')
def template_test():
items = ['Bottle is nice!', 2, 0.09]
render('example', items=items)
Code: Alles auswählen
%header = 'Test Template'
<html>
<head>
<title>{{header.title()}}</title>
</head>
<body>
<h1>{{header.title()}}</h1>
<p>Items in list: {{len(items)}}</p>
<ul>
%for item in items:
<li>
%if isinstance(item, int):
Zahl: {{item}}
%else:
%try:
Other type: ({{type(item).__name__}}) {{repr(item)}}
%except:
Error: Item has no string representation.
%end try-block (yes, you may add comments here)
%end
</li>
%end
</ul>
</body>
</html>
Der Template-Syntax ist extrem simpel:
1) Ein '%' markiert eine Zeile mit Python-Code. Um die richtige Einrückung muss man sich
nicht kümmern. Die wird vom Template Parser automatisch berechnet.
2) Ein '% end' beendet einen Python Block. Das ist notwendig, damit der Parser die Blöcke richtig erkennt.
3) '{{...}}' wird im Text durch den darin enthaltenen Python-Ausdruck ersetzt.
Diese Template-Engine ist zwar recht simpel, kann aber praktisch alles, was Python auch kann und ist extrem schnell dabei. Das Beispiel rendert mit der Bottle-eigenen Engine zwischen 7 und 10 mal schneller als ein vergleichbares Template mit Mako, obwohl Mako von sich selbst behauptet, 'Insanely Fast' zu sein
In den nächsten paar Minuten wird trotzdem ein Wrapper für Mako-Templates dazu kommen. Bottle möchte sich ja nicht aufdrängen, sondern nur gute Alternativen bieten, falls keine externe Template-Engine zur Verfügung steht.
Edit: @kbr Auf den ersten Blick sieht mir bobo etwas
zu minimal aus. Da fehlt einiges an Features, bis es (für mich) wirklich nützlich wird.