这个问题已经被问到了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设置?
发布于 2012-05-17 16:57:33
假设您使用的是pyramid_jinja2,那么您可以通过configurator实例使用pyramid_jinja2.get_jinja2_environment()来访问环境。
但是,显然您也可以在不直接访问环境的情况下使用register them via the pyramid config file:
[app:yourapp]
# ... other stuff ...
jinja2.filters =
# ...
getbitvalue = your_package.your_subpackage:GetBitValue发布于 2016-01-28 00:56:51
为了完整性,这将是您在代码中注册过滤器的方式。
# __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'] = GetBitValuehttps://stackoverflow.com/questions/10632232
复制相似问题