Seite 1 von 1

bottle, jinja2 und eigener Filter

Verfasst: Dienstag 4. Februar 2014, 18:11
von wagneru
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)

[Solved]-irgendiwie: bottle, jinja2 und eigener Filter

Verfasst: Mittwoch 5. Februar 2014, 15:37
von wagneru
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.

Re: bottle, jinja2 und eigener Filter

Verfasst: Mittwoch 5. Februar 2014, 18:06
von Sirius3
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