bottle, jinja2 und eigener Filter

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

Hallo,

ich versuche einen eigenen jinja2 Filter (in einer bottle app) einzubauen. Wie üblich wird

Code: Alles auswählen

from bottle import ...jinja2_template as template
eingebunden.

Wie greife ich jetzt in der bottle Anwendung auf das Enviroment von Jinja2 zu, ich bin von

Code: Alles auswählen

env = template.env
env.filters['fe'] = my_filter
ausgegangen.

Dies liefert einen: "AttributeError: 'functools.partial' object has no attribute 'env'"




(php Umsteiger aber eigentlich kein schlechter Mensch)
wagneru
User
Beiträge: 29
Registriert: Freitag 3. Januar 2014, 13:55
Wohnort: Groß-Gerau

Ich habe jetzt folgende Lösung:

Code: Alles auswählen

from bottle import ....jinja2_template as template, BaseTemplate
dann die Filterfunktion:

Code: Alles auswählen

def main_name(names):
    name_list = names.split(';')
    first_name = name_list[0]
    return first_name
und dann der Teil den ich nicht wirklich verstehe

Code: Alles auswählen

BaseTemplate.settings.update({'filters': {'fe':main_name}})
(dachte man kann über jinja2 irgendwie den Filter setzen, statt über das Objekt von bottle) Wen hier jemand eine gute Erklärung hat ...

Und die Nutzung des Filters in einem Template:

Code: Alles auswählen

{{ row.names | fe}}
PS: (update) hat nur den Nachteil, das man anscheinend mit BaseTemplate nur einen Filter setzen kann.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

zum PS: settings ist ein Dictionary das wiederum das Dictionary 'filters' enthält. Wenn Du also 'filters' statt mit einem neuen Dictionary zu überschreiben, mit neuen Filtern füllst, kannst Du auch mehrere Filter nacheinander hinzufügen:

Code: Alles auswählen

BaseTemplate.settings.setdefault('filters', {})['fe'] = main_name
Antworten