[Bottle]Gehen Templates nur als Datei ?

Django, Flask, Bottle, WSGI, CGI…
Antworten
MrNiceTry
User
Beiträge: 80
Registriert: Samstag 7. November 2009, 10:32

Ich habe Template-Strings, die ich gerne direkt an Bottle übergeben möchte.

Als Workaround schreibe ich im Moment eine template.tpl und den Dateinamen übergebe ich dann mit:

Code: Alles auswählen

template('template.tpl')
Funktioniert, ist aber wenig effektiv !

Gibt es einen Weg zur Direkteinspritzung ? :)


MrNiceTry
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Warum probierst du es nicht einfach?

Code: Alles auswählen

>>> import bottle
>>> bottle.template('Hello {{world}}', world="MrNiceTry")
[u'Hello ', u'MrNiceTry']
bottle.template und bottle.view nehmen als ersten Parameter entweder einen namen (xy), einen Dateipfad (xy.tpl, ./views/xy.tpl) oder direkt einen Template String entgegen. Alle drei Varianten werden gecached.
Bottle: Micro Web Framework + Development Blog
MrNiceTry
User
Beiträge: 80
Registriert: Samstag 7. November 2009, 10:32

Ich hab schon probiert !
Hat aber nicht funktioniert.

Jetzt ist mir auch klar, warum nicht!

Bei meinen Versuchen hab ich im Templatestring nur einfache HTML-Statements drin gehabt.
Und die lösen nicht die Unterscheidung zwischen der Datei und der String-Variante aus.
Sobald ich aber {{ }} im Template habe funktioniert es.

Das war mir so nicht klar.


Danke.
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

MrNiceTry hat geschrieben: Sobald ich aber {{ }} im Template habe funktioniert es.
Muss nicht unbedingt eine eckige Klammer sein, ich zitiere mal aus dem Quelltext von bottle (Zeile 1520 in akt. git Version):

Code: Alles auswählen

if "\n" in tpl or "{" in tpl or "%" in tpl or '$' in tpl:
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Da kann ich gleich nen Verbesserungsvorschlag einreichen :)

Code: Alles auswählen

>>> tpl = 'bla { blub'
>>> from operator import contains
>>> any(contains(tpl, char) for char in '\n{%$')
True
MrNiceTry
User
Beiträge: 80
Registriert: Samstag 7. November 2009, 10:32

Die folgende HTML-Zeile geht also als Datename durch:
  • Testzeile 1 <br> Testzeile 2
(So was einfaches hatte ich zum Testen genommen als es schief gegangen ist!)
Vorschlag: Die "< >" noch mit rein nehmen.
Die sind auch sehr signifikant für HTML. Ich hoffe ich habe keine Verwendung der <> in Pfadangaben übersehen.


MrNiceTry
MrNiceTry
User
Beiträge: 80
Registriert: Samstag 7. November 2009, 10:32

Zum Vorschlag von derdon:
derdon hat geschrieben:Da kann ich gleich nen Verbesserungsvorschlag einreichen :)

Code: Alles auswählen

>>> tpl = 'bla { blub'
>>> from operator import contains
>>> any(contains(tpl, char) for char in '\n{%$')
True
Da werden "" und "n" doch als einzelne Zeichen betrachtet, oder ?
Das würde bedeuten, wenn irgendwo ein "" oder ein "n" im Dateipfad ist, wird er zum Template ?


MrNiceTry
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Nein, `\n` ist ein Zeichen.

Code: Alles auswählen

In [1]: a = "\n"

In [2]: len(a)
Out[2]: 1

In [3]: a
Out[3]: '\n'
MrNiceTry
User
Beiträge: 80
Registriert: Samstag 7. November 2009, 10:32

cofi hat geschrieben:Nein, `\n` ist ein Zeichen.

Code: Alles auswählen

In [1]: a = "\n"

In [2]: len(a)
Out[2]: 1

In [3]: a
Out[3]: '\n'


Dann hab ich gerade was gelernt.
Danke.
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

derdon hat geschrieben:Da kann ich gleich nen Verbesserungsvorschlag einreichen :)

Code: Alles auswählen

>>> tpl = 'bla { blub'
>>> from operator import contains
>>> any(contains(tpl, char) for char in '\n{%$')
True

Es ist nur 10x langsamer ;)
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Templates ohne Template-Code machen keinen Sinn, daher suche ich nach häufigen Steuerzeichen '{%$' um Template Strings zu identifizieren. Das Newline ist auch dabei, weil es in Dateinamen nicht vorkommen darf, in Templates aber recht häufig ist. Alles Andere wird als Name identifiziert. Schließlich soll der chinesische Benutzer auch seine chinesischen Schriftzeichen im Dateinamen haben dürfen, wenn sein OS das erlaubt.

'<' könnte man allerdings noch hinzufügen, stimmt.

@derdon: Das kannst du besser ;) Die any() Lösung sieht weder schöner aus, noch ist sie schneller oder hat sonst irgendwelche Vorteile. Im Gegenteil: Sie ist deutlich langsamer als die sprachnativen 'in' Konstrukte. Der import ist übrigens überflüssig, da "any(c in tpl for c in '\n{%$')" auch ohne contains() hervorragend funktioniert.
Bottle: Micro Web Framework + Development Blog
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Nagut, dann ist sie eben langsamer. Aber dafür ist sie flexibler und sieht bei 10 bis 15 Zeichen besser aus. Und ja: Ich finde es mit any *schöner* :) Aber bei bottle spielt Geschwindigkeit eine große Rolle, also lass es einfach so.
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Hab ich eigentlich schon erwähnt, das ich auf meinem neuen Rechner über 25.000 Requests pro Sekunde hin bekommen habe? 8)

Hardware: i5-750, 8GB, P55 Chipsatz
Benchmark: ab -c100 -n1000000 http://localhost:8080/
Setup: pound + 4x (fapws3 + bottle0.7.0a)
Test: "Hello World"
Ergebnis: ~25.800 Requests/Sekunde; 0 Fehler
Bottle: Micro Web Framework + Development Blog
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Ja hast du :twisted:
the more they change the more they stay the same
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Defnull hat geschrieben: Hardware: i5-750, 8GB, P55 Chipsatz
*sabber* :-D
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Dav1d hat geschrieben:Ja hast du :twisted:
menno :roll:
Bottle: Micro Web Framework + Development Blog
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Defnull hat geschrieben:Hab ich eigentlich schon erwähnt, das ich auf meinem neuen Rechner über 25.000 Requests pro Sekunde hin bekommen habe? 8)
Kann mir bitte jemand mal den Sinn von absolut sinnlosen Benchmarks erklären?
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Sie sind fast so sinnvoll wie auf einen ein Monat alten Thread mit OffTopic zu antworten.
Bottle: Micro Web Framework + Development Blog
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Hihi, eiskalt erwischt, das kommt davon wenn man das Forum nicht hin und wieder als gelesen markiert ;)
Antworten