Це питання було задано раніше але прийняте рішення (задане самим афішем запитання) говорить, що ми можемо додати новий фільтр до jinja2.filter.FILTER відразу.
Але в Документація jinja2, рекомендується додавати фільтр у навколишнє середовище.
Я розробляю додаток під пірамідою і мені потрібно визначити власний фільтр і зробити наступне.
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
Де слід розмістити цей фрагмент коду?
Я спробував розмістити його у файлі переглядів, але це, очевидно, не вийшло.
Якщо я поміщую його __init__.py
, як я можу переконатися, що jinja2 підбирає його? Я маю на увазі, як мені повернути назад env
до налаштувань jinja2 під пірамідою?
Відповіді:
11 за відповідь № 1Припустимо, що ви використовуєте pyramid_jinja2
, ви можете використовувати pyramid_jinja2.get_jinja2_environment()
через configurator
екземпляр для доступу до середовища.
Однак, мабуть, ви також можете зареєструйте їх через файл конфігурації піраміди без доступу до програми env:
[app:yourapp]
# ... other stuff ...
jinja2.filters =
# ...
getbitvalue = your_package.your_subpackage:GetBitValue
5 для відповіді № 2
Для повноти це було б тим, як ви зареєструєте фільтр у коді.
# __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