Seite 1 von 1

Bottle SimpleTemplate Engine

Verfasst: Donnerstag 3. Februar 2011, 17:10
von mathman
Guten Abend,

ich habe mir jetzt ein paar mal das Turorial und die Doku
für die SimpleTemplate Engine von Bottle durchgelesen und
verstehe die leider nicht ganz.

In meinem reinen HTML Code muss ich {{ Wert }} als Platzhalter einbauen,
soweit habe ich das verstanden und ab jetzt gehts in die Grauzone :roll:
Das Template muss einmal codiert werden und befindet sich dann in den /views Ordner oder kann ich eine im Editor geschriebene html Datei (mit Platzhalter) einfach in den Ordner kopieren und die Endung .tpl dran setzen ?

Re: Bottle SimpleTemplate Engine

Verfasst: Donnerstag 3. Februar 2011, 21:33
von noisefloor
Hallo,
Das Template muss einmal codiert werden und befindet sich dann in den /views Ordner oder kann ich eine im Editor geschriebene html Datei (mit Platzhalter) einfach in den Ordner kopieren und die Endung .tpl dran setzen ?
So ähnlich. Codieren / kompilieren etc. musst du - wie auch sonst bei Python - selber nichts. Die .tpl-Dateien werden beim 1. Aufruf durch Bottle bzw. der Applikation, die auf Bottle setzt, geparst. Es wird aber keine neue Datei mit Byte-Code oder ähnlichem angelegt.

Grundsätzlich kannst du HTML-Dateien auch als Template nehmen. Ob das aber sinnvoll ist, ist eine anderen Sache, weil du dann ggf. nicht die Möglichkeiten eines Templates nutzt. Minimal solltest du IMHO den Kopf und Fuss von HTML-Seiten (z.B. Doctype-Definition, Style-Infos etc.) - also Sachen, die auf jeder deiner Seiten vorkommen, in eigenen Templates auslagern und per Include einbinden.

Gruß, noisefloor

Re: Bottle SimpleTemplate Engine

Verfasst: Donnerstag 3. Februar 2011, 22:13
von mathman
Danke für Antwort.

Ich verstehe dann irgendwie das Beispiel hier nicht

Code: Alles auswählen

@route('/hello')
@route('/hello/:name')
@view('hello_template')
def hello(name='World'):
    return dict(name=name)
Irgendwo muss doch das Template namens hello_template existieren.
Wenn das nicht im Byte Code existiert, wo würde das denn dann stehen ?

Oder aber erzeugt man im Vorfeld mittels

Code: Alles auswählen

>>> from bottle import template
>>> template('Hello {{name}}!', name='World')
u'Hello World!'
Das Template ? Müsste man doch dann aber irgendwie speichern ?!

Re: Bottle SimpleTemplate Engine

Verfasst: Donnerstag 3. Februar 2011, 22:48
von BlackJack
@mathman: Welche Datei da geladen wird, wie die heissen muss, und wo sie gesucht wird, steht doch ziemlich deutlich im Tutorial. Da wo auch das Beispiel steht: http://bottle.paws.de/docs/dev/tutorial ... -templates

Re: Bottle SimpleTemplate Engine

Verfasst: Donnerstag 3. Februar 2011, 23:04
von mathman
BlackJack hat geschrieben:@mathman: Welche Datei da geladen wird, wie die heissen muss, und wo sie gesucht wird, steht doch ziemlich deutlich im Tutorial. Da wo auch das Beispiel steht: http://bottle.paws.de/docs/dev/tutorial ... -templates
Dort heißt es doch
This will load the template file hello_template.tpl and render it with the name variable set. Bottle will look for templates in the ./views/ folder or any folder specified in the bottle.TEMPLATE_PATH list.
Das heißt doch, dass Bootle in den views Ordner (den man im Vorfeld sicherlich erstellen muss) nach dem Template sucht und das Template muss da als File gespeichert sein ?!

Re: Bottle SimpleTemplate Engine

Verfasst: Freitag 4. Februar 2011, 07:39
von noisefloor
Hallo,
Das heißt doch, dass Bottle in den views Ordner (den man im Vorfeld sicherlich erstellen muss) nach dem Template sucht und das Template muss da als File gespeichert sein ?!
So isses.

Wenn dir das Beispiel mit dem `@view(...)` und `return dict(...)` zu implizit ist, dann nutz' doch einfach die explizite Variante:

Code: Alles auswählen

from bottle import route, template, run

@route('/template_test')
def test(name='foo')
    return template('mein_template.tpl', name=name)
mit dem Template, dass im './views' Ordner liegt:

Code: Alles auswählen

<p>Hallo <strong>{{name}}</strong></p>
Gruß, noisefloor

Re: Bottle SimpleTemplate Engine

Verfasst: Freitag 4. Februar 2011, 10:10
von mathman
danke, genau das hab ich gemeint :)
wahrscheinlich hab ich mich nicht falsch ausgedrückt