如何使用变量在jinja2模板中传递过滤器名称

Kan*_*nia 6 filter jinja2

我定义了一些过滤器并经常使用它.我需要做一些A/B测试,在某些情况下,一些过滤器应该以不同的方式工作.

最简单的方法是在模板中创建一个存储过滤器名称的变量.这样的事情:

{% set filter_name = 'some_name' %}
{{ my_value|filter_name }}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试这个时,我收到一个错误:

TemplateAssertionError: no filter named 'filter_name'

请帮我找一个解决方案.

moh*_*ain 5

通过这样做{% set filter_name = 'some_name' %},您已经创建了一个名为“ filter_name”的字符串变量。您应该创建一个过滤器,该过滤器在确定要做什么的基础上再接受一个参数。

{% set filter_name = 'some_name' %}
{{ my_value|myfilter(filter_name) }}


def myfilter(value, filtername):
    if(filtername is 'twice')
        return value*2
    else
        .....
Run Code Online (Sandbox Code Playgroud)