View Helper in Jinja2?

Django, Flask, Bottle, WSGI, CGI…
Antworten
wagneru
User
Beiträge: 29
Registriert: Freitag 3. Januar 2014, 13:55
Wohnort: Groß-Gerau

Hallo,

ich versuche eine kleine Anwendung von dem php Framework Slim (Template: twig) auf eine
bottle/Jinja2 Anwendung zu übertragen. Dabei müssen die Ausgaben der Datenbank zeilenweise nachbearbeitet werden. In php includiere ich die passende Funktion, so das das Template frei von Programmierungen bleibt. In Jinja2 scheint man keine Funktionen einbauen zu können (so eine Art View Helper), so das das Template wie folgt aussieht.

Code: Alles auswählen

<td>{% if row.ghs_pictograms -%}
                          {% set ghs = row.ghs_pictograms.split(",") -%}
                          {% for ghs_one in ghs -%}
                            <img width="30" height="30" title="{{ ghs_one.strip() }}" src="/assets/img/ghs/{{ ghs_one.strip() }}.png" /></img>
                          {% endfor -%}
                      {% elif row.hazard_symbols %}
                          {% set hs = row.hazard_symbols.split(",") -%}
                          {% for hs_one in hs -%}
                            <img src="/assets/img/eu/{{hs_one.strip() }}.gif" width="30" height="30" title="{{ hs_one }}" />
                          {% endfor -%}
                      {% else %}
                         &nbsp;
                      {% endif -%}
Das sieht nicht wirklich elegant aus, auch könnte ich die Funktionalität auch an anderer Stelle gebrauchen.
Auch die Jinja2 Makros scheinen nicht dafür geeignet zu sein.

Bessere Ideen, Vorschläge (für einen potentiellen Umsteiger php->python).

Grüße
Uwe
BlackJack

@wagneru: Warum sollte das mit Makros nicht gehen? Was genau soll denn ersetzt werden? Das *alles*? Was wäre denn dann variabel und was fest? Oder geht es um die Bilder im ``if``/``elif``?

Edit: Und das gezeigte ist doch frei von Programmierung‽ Ich sehe da nur Anzeige- und keine Programmlogik.
wagneru
User
Beiträge: 29
Registriert: Freitag 3. Januar 2014, 13:55
Wohnort: Groß-Gerau

Ups, das geht ja schnell.

Im Kern geht es darum aus dem Feldinhalt "GHS02, GHS07" bzw. "F, Xn,N" (Beispiele) die
Verweise auf die passenden Bilder GHS02.png, usw. zu erzeugen und alle überflüssigen Leerzeichen zu entfernen. Ich habe etwas mit Makros herumprobiert, aber es passte nicht.
BlackJack

@wagneru:

Code: Alles auswählen

{%- macro images(names, base_path, img_attributes={}, type='png') -%}
  {%- for name in names.split(',') -%}
    <img {{img_attributes|xmlattr}} title="{{name|trim}}" src="{{base_path}}/{{name|trim}}.{{type}}"></img>
  {%- endfor -%}
{%- endmacro -%}

{%- set img_attributes = {'height': 30, 'width': 30} -%}

{{images('GHS02, GHS07', '/assets/img/ghs', img_attributes)}}
{{images('F, Xn,N', '/assets/img/eu', img_attributes, 'gif')}}
Ausgabe:

Code: Alles auswählen

<img  width="30" height="30" title="GHS02" src="/assets/img/ghs/GHS02.png"></img><img  width="30" height="30" title="GHS07" src="/assets/img/ghs/GHS07.png"></img>
<img  width="30" height="30" title="F" src="/assets/img/eu/F.gif"></img><img  width="30" height="30" title="Xn" src="/assets/img/eu/Xn.gif"></img><img  width="30" height="30" title="N" src="/assets/img/eu/N.gif"></img>
Ansonsten solltest Du mal bei den Einstellungen von Jinja schauen wenn Du ähnlicheres Whitespace-Verhalten wie in PHP haben möchtest. Insbesondere der Abschnitt Whitespace Control.
wagneru
User
Beiträge: 29
Registriert: Freitag 3. Januar 2014, 13:55
Wohnort: Groß-Gerau

Funktioniert perfekt - vielen herzlichen Dank!

PS: das nächste Mal frage ich aber was richtig Schweres :D
Antworten