5

之前已经提出这个问题,但接受的解决方案(由问题发布者本人给出)说我们可以直接将新过滤器添加到 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 设置发回?

4

2 回答 2

11

假设您正在使用pyramid_jinja2,您可以pyramid_jinja2.get_jinja2_environment()通过configurator实例使用来访问环境。

但是,显然您也可以通过金字塔配置文件注册它们,而无需直接访问 env:

[app:yourapp]
    # ... other stuff ...
    jinja2.filters =
        # ...
        getbitvalue = your_package.your_subpackage:GetBitValue
于 2012-05-17T08:57:32.793 回答
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
于 2016-01-27T16:56:51.323 回答