render_template 方法渲染模板

from flask import Flask , render_template

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

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

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

template.py

from flask import Flask , render_template

app = 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

<html>
<meta charset="utf-8">
<title>测试</title>
<body>
<p>name = {{ name }}</p>
<p>age = {{ age }}</p>
</body>
</html>

Flask模板与自定义过滤器_html


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

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

**

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)

Flask模板与自定义过滤器_html_02

如果想获取字典中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>

最终返回到页面的结果

Flask模板与自定义过滤器_flask_03



模板变量

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

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

<p>my_list[0] + my_list[1] = {{ my_list[0] + my_list[1] }}</p><p>{{ "hello dj" }}</p>

Flask模板与自定义过滤器_flask_04


模板过滤器

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

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

<p>{{ '<h3>123</h3>' | safe }}</p>

Flask模板与自定义过滤器_flask_05

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

可以搭配多结合使用

例如:

<p>{{ "   hello <b>python</b>" } | trim | safe | upper}</p>

Flask模板与自定义过滤器_html_06

列表过滤器

first    取第一个参数

last    取最后一个参数

length    获取列表长度

sum        列表求和

sort        列表排序



自定义过滤器

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

两种方式

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

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

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

应用到模板文件中

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

通过

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

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


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

from flask import Flask , render_template

app = 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]

Flask模板与自定义过滤器_html_07