簡體   English   中英

python&jinja2:執行預定義的過濾器列表

[英]python & jinja2: execute pre-defined list of filters

嘗試做這樣的事情:

filters = ['foo', 'bar']

然后在Jinja2模板中:

<p>{{value|filter for filter in filters}}</p>

foobar是我定義的Jinja2過濾器。

這是行不通的,但似乎應該很容易完成。 有什么想法嗎?

假設您使用的是長頸瓶(否則只需調整但要定義過濾器),就可以創建一個過濾器以應用命名的過濾器。

在您的過濾器定義中(例如my_filters.py ):

def filter1(x):
    return 'filtered1( {} )'.format(x)
app.jinja_env.filters['filter1'] = filter1 # Register filter

def filter2(x):
    return 'filtered2( {} )'.format(x)
app.jinja_env.filters['filter2'] = filter2

# Create a filter to apply a list of filters by name...
def apply_filters_by_name(x, filter_names):
    result = x
    # Loop through filter names and apply them sequentially
    for fname in filter_names: 
        # Get the filter function matching this name
        filter_function = app.jinja_env.filters[fname]

        # Apply the filter
        result = filter_function(result) # apply filter

    return result
app.jinja_env.filters['apply_filters_by_name'] = apply_filters_by_name

...因此在您的HTML模板中,例如:

{% set some_filter_names = ['filter1', 'filter2'] %}
{{ 'hello world'|apply_filters_by_name(some_filter_names) }}

在這里,我在模板中設置了some_filter_names,但是顯然您也可以將其作為變量傳遞。

結果是:

filtered2( filtered1( hello world ) )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM