这个问题已经被问到before但是接受的解决方案(由问题海报自己给出)说我们可以直接将新过滤器添加到jinja2.filter.FILTER。
但在jinja2 documentation中,建议将过滤器添加到环境中。
我正在开发金字塔下的应用,需要定义我的自定义过滤器并执行以下操作。
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设置?
答案 0 :(得分:11)
假设您使用的是pyramid_jinja2
,您可以通过pyramid_jinja2.get_jinja2_environment()
实例使用configurator
来访问环境。
但是,显然你也可以register them via the pyramid config file直接访问env:
[app:yourapp]
# ... other stuff ...
jinja2.filters =
# ...
getbitvalue = your_package.your_subpackage:GetBitValue
答案 1 :(得分:6)
为了完整起见,这将是您在代码中注册过滤器的方式。
# __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