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 1Zakł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