Jinja2: im Template rechnen

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Hallo...

nach einiger Zeit melde ich mich mal wieder und habe natuerlich auch gleich eine Frage parat.

Ich bastele gerade mit Glashammer rum. Die Wahl viel darauf, weil es ein WebFramework ist, das auf Jinja2 und Werkzeug aufsetzt und ich mich vorallem mit Jinja2 schon auseinandergesetzt habe.

Nun zur eigentlichen Frage: Kann ich mit Jinja2 im Template rechnen? Das heißt, ich uebergebe eine Liste aus Objekten, von denen ich im Template eine Auswahl treffe. Diese Auswahl moechte ich dann zB aufsummieren und das Ergebnis dann ausgeben.

Geht das?

Beste Gruesse
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

ich glaube, du kannst nur sowas wie liste|sum machen...
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Auswählen und Aufsummieren klingt aber eigentlich nach Dingen, die nicht ins Template gehören, sondern Teil der Anwendungslogik sind und im "Controller" stattfinden sollten oder wie der Teil in einer MVC-artigen Architektur auch immer genannt sein mag.

Stefan
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

sma hat geschrieben:Auswählen und Aufsummieren klingt aber eigentlich nach Dingen, die nicht ins Template gehören, sondern Teil der Anwendungslogik sind und im "Controller" stattfinden sollten oder wie der Teil in einer MVC-artigen Architektur auch immer genannt sein mag.

Stefan
Ist natürlich auch viel Geschmackssache, aber ich würde auch so wenig Logik wie nötig ins Template packen und den Rest vorher in Python erledigen. Ansonsten verliert das Template ja irgend wie seinen inneren Sinn ;-)
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Also die Auswahl laeuft im Controller ab und wird dann dem Template zugesendet. Aber das Aufsummieren ist in diesem Falle nur ein zusaetzliches Template-Spezifisches Extra. Deshalb wollte (und habe) ich es auch dorthin ausgelagert.

Da man scheinbar nicht problemlos sowas wie {% set foo = foo + bar %} machen kann, habe ich die Variante mit der Liste gewaehlt.

Hier ein kleines Beispiel fuer sowas wie einen Warenkorb:

Code: Alles auswählen

<% set foo = [] %>
<% for item in cart %>
    {{ item.name }} - {{ item.prize }}€<br />
    <# hier muss man ein bisschen tricksen, damit Jinja nicht "None" ausschreibt. #>
    {{ (foo.append(item.prize)) or "" }}
<% endfor %>
gesamt: {{ foo|sum }}€
PS: Ich habe versucht, den Code ein wenig so zu gestalten, damit ueberhaupt irgendein Highlighning was bringt. Ein Template-Highlighter waer schon toll :roll:
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Antworten