/ / Hinzufügen eines benutzerdefinierten Filters zu jinja2 unter Pyramide - Python, Pyramide, Jinja2

Hinzufügen eines benutzerdefinierten Filters zu jinja2 unter Pyramide - Python, Pyramide, jinja2

Diese Frage wurde gestellt Vor Aber die akzeptierte Lösung (von dem Frageposter selbst angegeben) besagt, dass wir den neuen Filter sofort in jinja2.filter.FILTER einfügen können.

Aber in der jinja2 DokumentationEs wird empfohlen, den Filter zur Umgebung hinzuzufügen.

Ich entwickle eine App unter Pyramide und muss meinen benutzerdefinierten Filter definieren und Folgendes tun.

from jinja2 import Environment

#Define a new filter
def GetBitValue(num,place):
y = (num >> (place-1)) & 1
return y

env = Environment()
env.filters["getbitvalue"] = GetBitValue

Wo soll dieses Codefragment platziert werden?

Ich habe versucht, es in der Ansichtsdatei zu platzieren, aber das hat offensichtlich nicht funktioniert.

Wenn ich es einlege __init__.py, wie kann ich sicherstellen, dass es von jinja2 aufgenommen wird? Ich meine, wie schicke ich das zurück? env zu jinja2 einstellungen unter pyramide?

Antworten:

11 für die Antwort № 1

Angenommen, Sie verwenden pyramid_jinja2kannst du benutzen pyramid_jinja2.get_jinja2_environment() über die configurator Instanz, um auf die Umgebung zuzugreifen.

Anscheinend kannst du das aber auch Registrieren Sie sie über die Pyramiden-Konfigurationsdatei ohne direkt auf die env zuzugreifen:

[app:yourapp]
# ... other stuff ...
jinja2.filters =
# ...
getbitvalue = your_package.your_subpackage:GetBitValue

5 für die Antwort № 2

Der Vollständigkeit halber wäre dies, wie Sie den Filter im Code registrieren.

# __init__.py
def main(global_config, **settings):
#....
config = Configurator(settings=settings)
config.include("pyramid_jinja2")
config.commit() # this is needed or you will get None back on the next line
jinja2_env = config.get_jinja2_environment()
jinja2_env.filters["getbitvalue"] = GetBitValue