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 に答える