Red*_*ron 5 python jinja2 pyramid
之前已经问过这个问题,但是接受的解决方案(由问题海报自己给出)说我们可以直接将新过滤器添加到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
Run Code Online (Sandbox Code Playgroud)
这个代码片段应该放在哪里?
我尝试将它放在视图文件中但显然不起作用.
如果我把它__init__.py放进去,我该如何确保jinja2接收它?我的意思是如何将env金字塔下的jinja2设置发送回去?
Thi*_*ter 11
假设您正在使用pyramid_jinja2,您可以pyramid_jinja2.get_jinja2_environment()通过configurator实例使用来访问环境.
但是,显然你也可以通过金字塔配置文件注册它们而无需直接访问env:
[app:yourapp]
# ... other stuff ...
jinja2.filters =
# ...
getbitvalue = your_package.your_subpackage:GetBitValue
Run Code Online (Sandbox Code Playgroud)
为了完整起见,这将是您在代码中注册过滤器的方式.
# __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
Run Code Online (Sandbox Code Playgroud)