在金字塔下为jinja2添加自定义过滤器

时间:2012-05-17 08:30:56

标签: python pyramid jinja2

这个问题已经被问到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设置?

2 个答案:

答案 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