Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将自定义过滤器添加到金字塔下的jinja2_Python_Pyramid_Jinja2 - Fatal编程技术网

Python 将自定义过滤器添加到金字塔下的jinja2

Python 将自定义过滤器添加到金字塔下的jinja2,python,pyramid,jinja2,Python,Pyramid,Jinja2,已经提出了这个问题,但公认的解决方案(由问题海报自己给出)表示,我们可以立即将新过滤器添加到jinja2.filter.filter 但在环境中,建议将过滤器添加到环境中 我正在金字塔下开发一个应用程序,需要定义我的自定义过滤器并执行以下操作 from jinja2 import Environment #Define a new filter def GetBitValue(num,place): y = (num >> (place-1)) & 1 re

已经提出了这个问题,但公认的解决方案(由问题海报自己给出)表示,我们可以立即将新过滤器添加到jinja2.filter.filter

但在环境中,建议将过滤器添加到环境中

我正在金字塔下开发一个应用程序,需要定义我的自定义过滤器并执行以下操作

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
这个代码片段应该放在哪里

我试着把它放在视图文件中,但显然不起作用

如果我把它放在
\uuuu init\uuuuu.py
中,我如何确保jinja2能捡起它?我的意思是,如何将
env
发送回pyramid下的jinja2设置?

假设您正在使用,您可以使用
pyramid\u jinja2。通过
配置程序
实例获取jinja2\u environment()
以访问环境

但是,显然,您也可以在不直接访问env的情况下:

[app:yourapp]
    # ... other stuff ...
    jinja2.filters =
        # ...
        getbitvalue = your_package.your_subpackage:GetBitValue

为了完整性,这将是在代码中注册过滤器的方式

# __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

您不应创建新环境,但应访问金字塔使用的环境。根据我在金字塔文档中阅读的内容,jinja本机不受支持,因此请发布您如何将jinja注册为金字塔中的渲染器的代码。感谢您的指示。我使用pyramid_jinja2渲染jinja2,它们提供了一个函数get_jinja2_environment()。谢谢,问题已经解决了,如果我不想在配置中指定怎么办?这不是真正的配置问题,是吗?它应该在代码内部连接。配置用于可移动位,这对于开发/生产阶段是不同的。一些添加:Config.include('pyramid_jinja2')Config.commit()#您可能会在这里看到一个jinjaEnv=Config.get_jinja2_environment()。这一个很棒!这对我帮助很大。