Bottle und alternatives SubTemplate Handling

Django, Flask, Bottle, WSGI, CGI…
Antworten
Benutzeravatar
lynadge
User
Beiträge: 112
Registriert: Sonntag 4. April 2010, 10:17

Hallo.

Ich weiß, ich habe mal gesagt ich baue mir ein eigene Template Engine aber ich Teste mal wieder aufs neue wie die aktuellen Engines so sind.

Bottle hat ja die Möglichkeit mittels '%include ...' ein SubTemplate einzubinden.

Geht das auf auch eine andere Art und weise?

Da ich die Platzhalter im Template mit einem Dictionary ersetze wollte ich das auch so mit dem SubTemplate machen. In dem ich den Inhalt des SubTemplates in einen String lade und ihn in ein dict packe. Dessen Platzhalter sollten dann wiederum ersetzt werden können.

Ich hoffe ihr könnt mir folgen.

Mein Ziel ist es einfach auch die SubTemplates über den Python Code zu verwalten. Ist das möglich mit Bottle und dessen Template Funktionalität?

Gruß, deadshox

#Edit
Ein möglichkeit würde es geben, da bin ich mir aber nicht sicher wie performant sie ist.

Code: Alles auswählen

@route('/')    
def index()
    dict = {
        'stpl1': template('stpl1'),
        'stpl2': template('stpl2')
    }
    
    return template('main', dict)
Zuletzt geändert von lynadge am Dienstag 23. November 2010, 15:16, insgesamt 1-mal geändert.
Benutzeravatar
noisefloor
User
Beiträge: 4149
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

ja, dass sollte so gehen.

Aber der Sinn erschließt sich mir noch nicht... Ok, du musst den Python-Code anstelle des Templates ändern - aber ändern muss du trotzdem was.

Gruß, noisefloor
Benutzeravatar
lynadge
User
Beiträge: 112
Registriert: Sonntag 4. April 2010, 10:17

Ja, das ich trotzdem was ändern muss ist ok.

Mir erschließt sich halt nur der Sinn darin nicht, Code in einer HTML Datei zuschreiben, deswegen wird ja auch Code von HTML getrennt.

Ich will halt am Ende eine strikte Trennung von Code und Layout haben.

Wäre meine Variante denn überhaupt Performant genug im Vergleich zur Standardvariante?
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

template() und %include machen mehr oder weniger das gleiche. Von der Geschwindigkeit her sollte das also wenig Unterschied machen.

Ich muss etwas raten, aber in deinem ersten Beitrag hört es sich so an als ob du Templates mit Templates generieren und dann ein zweites mal rendern willst? Das ist definitiv langsamer, da die Templates dann jedes mal neu geparst werden müssen. Und macht auch wenig Sinn.

Aber ich glaube, was du eigentlich suchst, ist %rebase, %def und eine gescheite Template-Hierarchie.

PS: Es geht bei Templates üblicherweise nicht um eine strikte Trennung von Code und Layout, sondern um eine Trennung von Layout(logik) und Verarbeitungslogik. Soll heißen: Templates dürfen durchaus Logik enthalten, so lange diese mit der Darstellung der Daten zu tun hat. Templates dürfen aber nicht für die Generierung der Daten missbraucht werden. So lange also keine Datenbankabfragen im Template stehen, ist alles in Ordnung.
Bottle: Micro Web Framework + Development Blog
Benutzeravatar
lynadge
User
Beiträge: 112
Registriert: Sonntag 4. April 2010, 10:17

Ok, verstanden. Langsam leuchtet das alles ein. Danke!

Das mit %rebase klappt ganz gut.

Eine frage noch, wie kann ich es umgehen wenn ich im Template 'h1' und 'h2' definiert habe und nur 'h2' ändere, dann müsste ich ja jedes mal 'h1' trotzdem mit im SubTemplate übergeben. Das wäre jetzt bei diesem Beispiel noch iO aber was ist ich da 10/20 Parameter habe, wo sich nur 2 ändern, dann müsste ich die ja jedes mal 'mit schleppen'.

Ich hoffe du kannst mir folgen. :)

#Edit
Und um so tiefer ich dann verschachtle, umso mehr Argumente werden es ja. Siehe %def.
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Das geht bisher nicht. Alle Parameter müssen explizit übergeben werden. Mit 0.9 kommt aber eine überarbeitete Template Engine, die nicht ganz so pingelig mit den Namensräumen um geht und solche Sachen stark vereinfacht.
Bottle: Micro Web Framework + Development Blog
Benutzeravatar
lynadge
User
Beiträge: 112
Registriert: Sonntag 4. April 2010, 10:17

Alles klar.

Hast du davon schon teile eingebaut? Denn ich nutze schon die v0.9dev
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Die neue Template Engine ist im stpl-v2 branch und noch recht experimentell. Sie ist leider auch nicht ganz abwärts kompatibel, wird also mindestens eine Version lang parallel zur alten Engine enthalten sein:

Code: Alles auswählen

New Features:
  * Multi-line Python blocks: <% ... %>
  * ~1.5x faster template parsing.
  * Better (more strict and predictable) indentation algorithm.
  * The namespace of a calling template is available to the called
    sub-template. Explicitly passing variables to `rebase()` or
    `include()` is no longer necessary, but still possible.
  * In base-templates, ``body`` contains the text of the calling main
    template. Use ``{{body}}`` to print it.
  * Preprocessor statements ( `{{= }}` and `<%= %>` ) are executed at compile-time instead of run-time.

Changes that are not backwards compatible:
  * ``rebase`` and ``include`` are functions now.
  * Inline-statements that do not return unicode are limited to ASCII.
    They are not automatically encoded any more. Use unicode or encode
    yourself if you need non-ASCII characters. In return, rendering
    speed is much better. STPL beats all other template engines in the
    jinja2 bench now.
Bottle: Micro Web Framework + Development Blog
Benutzeravatar
lynadge
User
Beiträge: 112
Registriert: Sonntag 4. April 2010, 10:17

Gut, dann warte ich noch.

Die neuen Features klingen schon mal gut. Mittlerweile kann ich mir sogar vorstellen auf eine eigene engine zu verzichten.

Freue mich schon auf das nächste Release.
Antworten