render_template 方法渲染模板
from flask import Flask , render_template
第一个参数是要渲染到当前页面的模板文件,默认是从当前程序目录下的templates文件夹中去获取
后面的参数,把需要的模板变量以平铺的方式需要几个传几个就行。
模板中以双大括号的形式 包含要传入的变量名,{{ name }}
template.py
from flask import Flask , render_template
app = Flask(__name__)
.route("/index")
def index():
return render_template("index.html",name="baicai",age="20")
if __name__ == '__main__':
app.run(debug=True)
index.html
<html>
<meta charset="utf-8">
<title>测试</title>
<body>
<p>name = {{ name }}</p>
<p>age = {{ age }}</p>
</body>
</html>
同样,也能将需要传的参数和值都写到字典里传入
加星星,意思是解包这个字典
**
data = {
"name":"baicai",
"age":20
}
return render_template("index.html",**data)
在字典中解包出来字典,传过去前端是以字典的形式返回,列表也是
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"] }}
列表也可以嵌套其他变量的值
<p>my_dict = {{ my_dict.city }}</p><p>my_list = {{ my_list[my_int] }}</p>
最终返回到页面的结果
模板变量
使用起来特别灵活,可以进行加减法操作
如果双花括号里的变量名存在传值,就把值返回到页面,不存在就当字符串返回到前端中,前提是要有双引号包裹着
<p>my_list[0] + my_list[1] = {{ my_list[0] + my_list[1] }}</p><p>{{ "hello dj" }}</p>
模板过滤器
对变量传来的值进行过滤等操作
safe 关闭安全模式,禁用转义,Flask中转义默认是开启的
<p>{{ '<h3>123</h3>' | safe }}</p>
capitalize 将变量值的首字母转成大写,其余字母转小写
lower 所有字符转小写
upper 所有字符转大写
title 把值中每个单词的首字母转为大写
trim 首位空格去除
reverse 反转字符串
striptags 渲染前把值中所有html标签删除
可以搭配多结合使用
例如:
<p>{{ " hello <b>python</b>" } | trim | safe | upper}</p>
列表过滤器
first 取第一个参数
last 取最后一个参数
length 获取列表长度
sum 列表求和
sort 列表排序
自定义过滤器
因为一些需求,flask内置的过滤器不能达到我们的需求,这时候就需要自写过滤器
两种方式
1、自写函数添加到应用过滤器中
创建过滤器并写要过滤的操作,其实就是个函数方法
添加过滤器到flask应用中,并给过滤器起名
应用到模板文件中
定义的函数要带形参,表示接收变量的值,内置就接收了
通过
app.add_template_filter(自定义方法 , "过滤器名称")
添加函数方法到flask过滤器中
例如:将列表中的值每隔两个获取到
from flask import Flask , render_template
app = Flask(__name__)
.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")
# 使用装饰器自定义过滤器
.template_filter("li3")
def list_step_3(li):
return li[::3]