自定义jinja2 过滤器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自定义jinja2 过滤器相关的知识,希望对你有一定的参考价值。

今天,我们要讲的是自定义jinja2 过滤器这个知识点,因为官方文档对此一代而过,讲得不够清楚,所以我们专门拿出来讲一下。

例子

例子写了两个自定义过滤器,一个是转换字典到字符串的过滤器,一个是返回当前参数的类型的过滤器。

源代码:

https://github.com/lewis617/jinja2-filter

filter是个函数

filter是个函数,跟angular的过滤器几乎一模一样。参数就是管道(pipe)前面那个变量。比如   123|myfilter,123就是myFilter的参数。如果需要两个参数,则在myFilter后面加(),即123|myFilter(234)。

filter函数写在哪

这是这个是编写filter的关键。filter函数写在app.run前,注册在app.jinja_env.filters中,这是什么意思?看代码:

app = Flask(__name__)

# custom filter
# convert dict to string
def json_dumps(dict):
        result = json.dumps(dict)
        return result
# return type of arg
def typeFilter(arg):
        result = type(arg)
        return result

env = app.jinja_env
env.filters[json_dumps] = json_dumps
env.filters[typeFilter] = typeFilter
  1. 实例化一个Flask对象app
  2. 编写两个函数
  3. 将函数挂在app.jinja_env.filters上

就是这么简单!

测试示例代码

第一个过滤器转换字典到字符串,第二个返回当前参数的类型

我们在index.html中编写:

 

<body>
dict is {{ dict|typeFilter}}
<hr>
 dict | json_dumps is{{ dict|json_dumps |typeFilter}}
<hr>
you can use json_dumps filter to send dict to js,remember to add safe filter,<br>
press f12 to test it
</body>
<script>
    //you can use json_dumps filter to send dict to js,remember to add safe filter
    console.log({{ dict |json_dumps|safe}})
</script>

 

然后在app.py中渲染这个html

@app.route(/)
def hello_world():
    dict={name:lewis,age:24}
    return render_template(index.html,dict=dict)


if __name__ == __main__:
    app.run()

结果:

技术分享

json_dumps可以将dict转为字符串,这样我们用jinja渲染的对象列表之类的就可以,以字符串的形式打印出来,便于我们在开发环境下监视渲染状态。

 

如果您觉得本博客或者程序帮到了您,就赏颗星吧!

 https://github.com/lewis617/jinja2-filter

以上是关于自定义jinja2 过滤器的主要内容,如果未能解决你的问题,请参考以下文章

ansible中过滤器的介绍以及如何自定义过滤器

python测试开发django-181.自定义过滤器(除法取余)

flask基础之jinja2模板-过滤器

jinja2截取字符串

Flask阶段回顾和展望

使用 Jinja2 自定义模板