/ / Додавання спеціального фільтра до jinja2 під пірамідою - python, pyramid, jinja2

Додавання спеціального фільтра до jinja2 під піраміду - python, pyramid, jinja2

Це питання було задано раніше але прийняте рішення (задане самим афішем запитання) говорить, що ми можемо додати новий фільтр до 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