/ / Dodawanie niestandardowego filtra do jinja2 w piramidzie - python, piramida, jinja2

Dodanie niestandardowego filtra do jinja2 w piramidzie - python, piramida, jinja2

To pytanie zostało zadane przed ale przyjęte rozwiązanie (podane przez sam plakat z zapytaniem) mówi, że możemy dodać nowy filtr do jinja2.filter.FILTER.

Ale w dokumentacja jinja2, zaleca się dodanie filtra do środowiska.

Pracuję nad aplikacją w piramidzie i muszę zdefiniować mój filtr niestandardowy i wykonać następujące czynności.

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

Gdzie należy umieścić ten fragment kodu?

Próbowałem umieścić go w pliku widoków, ale to oczywiście nie zadziałało.

Jeśli go umieszczę __init__.py, jak mogę się upewnić, że jinja2 go podnosi? Mam na myśli, jak mogę odesłać env do ustawień jinja2 w piramidzie?

Odpowiedzi:

11 dla odpowiedzi nr 1

Zakładając, że używasz pyramid_jinja2, możesz użyć pyramid_jinja2.get_jinja2_environment() za pośrednictwem configurator wystąpienie w celu uzyskania dostępu do środowiska.

Jednak najwyraźniej możesz też zarejestruj je za pomocą pliku konfiguracyjnego piramidy bez bezpośredniego dostępu do env:

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

5 dla odpowiedzi nr 2

Dla kompletności będzie to sposób rejestrowania filtra w kodzie.

# __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