Flask模板与自定义过滤器

网友投稿 402 2022-08-28


Flask模板与自定义过滤器

render_template 方法渲染模板

from flask import Flask , render_template

第一个参数是要渲染到当前页面的模板文件,默认是从当前程序目录下的templates文件夹中去获取

后面的参数,把需要的模板变量以平铺的方式需要几个传几个就行。

模板中以双大括号的形式 包含要传入的变量名,{{ name }}

template.py

from flask import Flask , render_templateapp = Flask(__name__)@app.route("/index")def index(): return render_template("index.html",name="baicai",age="20")if __name__ == '__main__': app.run(debug=True)

index.html

测试

name = {{ name }}

age = {{ age }}

同样,也能将需要传的参数和值都写到字典里传入

加星星,意思是解包这个字典

**

data = { "name":"baicai", "age":20}return render_template("index.html",**data)

在字典中解包出来字典,传过去前端是以字典的形式返回,列表也是

@app.route("/index")def index(): data = { "name":"baicai", "age":20, "my_dict":{"city":"shandong"}, "my_list":[1,2,3,4,5], "my_int":0 } return render_template("index.html",**data)

如果想获取字典中city对应的值,只需在模板中写入

my_dict = {{ my_dict.city }}

或者

my_dict = {{ my_dict["city"] }}

列表也可以嵌套其他变量的值

my_dict = {{ my_dict.city }}

my_list = {{ my_list[my_int] }}

最终返回到页面的结果

模板变量

使用起来特别灵活,可以进行加减法操作

如果双花括号里的变量名存在传值,就把值返回到页面,不存在就当字符串返回到前端中,前提是要有双引号包裹着

my_list[0] + my_list[1] = {{ my_list[0] + my_list[1] }}

{{ "hello dj" }}

模板过滤器

对变量传来的值进行过滤等操作

safe    关闭安全模式,禁用转义,Flask中转义默认是开启的

{{ '

123

' | safe }}

capitalize 将变量值的首字母转成大写,其余字母转小写lower 所有字符转小写upper 所有字符转大写title 把值中每个单词的首字母转为大写trim 首位空格去除reverse 反转字符串striptags 渲染前把值中所有html标签删除

可以搭配多结合使用

例如:

{{ " hello python" } | trim | safe | upper}

列表过滤器

first    取第一个参数

last    取最后一个参数

length    获取列表长度

sum        列表求和

sort        列表排序

自定义过滤器

因为一些需求,flask内置的过滤器不能达到我们的需求,这时候就需要自写过滤器

两种方式

1、自写函数添加到应用过滤器中

创建过滤器并写要过滤的操作,其实就是个函数方法

添加过滤器到flask应用中,并给过滤器起名

应用到模板文件中

定义的函数要带形参,表示接收变量的值,内置就接收了

通过

app.add_template_filter(自定义方法 , "过滤器名称")

添加函数方法到flask过滤器中

例如:将列表中的值每隔两个获取到

from flask import Flask , render_templateapp = Flask(__name__)@app.route("/index")def index(): data = { "name":"baicai", "age":20, "my_dict":{"city":"shandong"}, "my_list":[1,2,3,4,5], "my_int":0 } return render_template("index.html",**data)# 1、自定义过滤器def list_step_2(li): return li[::2]# 2、加入到当前应用中app.add_template_filter(list_step_2,'li2')if __name__ == '__main__': app.run(debug=True)

2、使用装饰器

参数里是过滤器名称

@app.temolate_filter("li3")

# 使用装饰器自定义过滤器@app.template_filter("li3")def list_step_3(li): return li[::3]


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:springboot如何获取yml里面的属性值
下一篇:Flask请求钩子和g对象
相关文章

 发表评论

暂时没有评论,来抢沙发吧~