模板简介
模板是web开发必备的模块,因为我们在渲染一个网页的时候,不一定都是纯文本,有时候是富文本,这时候我们就需要用到模板了,flask配置的模板是jinja2,这个模板很强大,执行效率高
flask渲染jinja2模板
Flask渲染jinja2只需要通过render_template()方法即可,但是我们必须要创建一个templates
目录来放模板文件,当然可以修改模板文件的路径,通过Flask修改init参数, 指定模板文件查找路径 template_folder,但是不建议这种做法
模板文件内容
# render_template需要从flask中导入
from flask import Flask, render_template
# 指定模板文件查找路径 template_folder
app = Flask(__name__)
@app.route("/")
def index():
return render_template("demo1.html") # 模板文件名为demo1.html
if __name__ == '__main__':
app.run(port=8000, debug=True)
只要我们访问http://127.0.0.1:8000/
就会显示“这是模板文件”的字样
模板传参
直接传参
render_template("demo1.html", username="xx")
添加username参数
模板文件怎么样接受呢?
demo1.html模板文件中需要{{username}}接收
直接传参缺点是:如果需要的参数很多,就会显得很多代码,冗余
字典传参
首先需要在视图函数中定义好字典,这里以content={"username":"xiaoxie"}
render_template("demo1.html", content=content)添加参数
demo1.html模板文件需要{{conten.username}}
这样接收,这样的模板文件就会麻烦很多,所以就有了**content
, 这个参数,会自动变字典为关键字传参的形式,模板文件直接使用{{username}}
就可以渲染到页面中
如果字典里面还嵌套字典,就是{{dict.key}}
;
嵌套列表是: {{list.1}}
根据索引取值,从0开始
模板过滤器(filter)
过滤器是通过管道符号(|)进行使用的,例如:{{name|length}},将返回name的长度。过滤器根据自己的功能,再返回相应的值,之后再将结果渲染到页面中。jinja2中内置了许多过滤器
flask内置过滤器
返回数值的绝对值
abs(value)
返回字符串长度,包括空格
length(value)
使用默认值
default(value)
返回单词的个数(以空格作为分割符)
wordcount(value)
返回数组的首元素
first(value)
返回数组的最后一个元素
last(value)
拼接字符串(每个字母都会拼接)
join(“需要添加的”)
全部变成大写
upper(value)
全部变成小写
lower(value)
设置为安全,当我们需要渲染一些script代码到页面中,如果不设置为安全,以为就是字符串,自动帮我们转义了
safe(vlaue)
关闭自动转义
{% autoescape off %}-->
<p>{{es}}只有在这里面才会关闭转义</p>
{% endautoescape %}
字符串格式化
format(value)
变成浮点数
float(value)
转成整型
int(value)
去标签
striptags(value)
截取字符串
truncate(length=5) # 最后面三个是省略号,长度不能低于3
替换字符串
replace(old, new)
代码:
视图函数
模板文件
页面显示
自定义过滤器
需要导入template_filter
@app.template_filter("过滤器名字")
def cut(value):
return value.replace("nishi", "nihao")
这样就简单的定义了一个过滤器。