表达式

jinja2是一个被广泛使用的模板引擎,其设计思想源自于django模板引擎,jinja2扩展了语法,增加了强大的功能,被flask选为内置的模板语言。

你应该已经知道,当视图函数返回一个html文件时,需要使用render_template函数,可你想过没有,你编写的html文件里的内容,有很多是有变化的。比如一个网站,你登录以后,网站的页面上要显示你的用户名,但这个页面用的是同一个html,它是怎样做到不同的人登录后看到不同的名字呢?

这正是模板引擎要解决的问题,在编写html时,那些需要变化的地方需要使用模板引擎的表达式来编写,比如名字需要变化,那么在编写html时,你应该这样编写

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p>欢迎你 </p>
</body>
</html>

看见没,名字的部分用两个大括号围起来,{{ ... }} 的部分是动态变化的,使用render_template渲染模板时,传递name这个参数就可以动态设置这个部分

from flask import Flask, render_template

app = Flask(__name__)


@app.route('/name/<string:name>', methods=['GET'])
def name(name):
    return render_template('name.html', name=name)


if __name__ == '__main__':
    app.run(debug=True)

启动服务,在浏览器里输入 http://127.0.0.1:5000/name/小明

那么页面上显示的内容就是

欢迎你 小明

如果你把小明修改成小刚,页面也随之发生变化,这就是模板引擎所做的工作。

模板有助于页面展现和业务逻辑之间的分离,在flask中,模板(html文件)被放置在程序的templates这个默认文件夹下,本示例的目录结构如下

./
├── app.py
└── templates
    └── name.html

扫描关注, 与我技术互动

QQ交流群: 211426309

加入知识星球, 每天收获更多精彩内容

分享日常研究的python技术和遇到的问题及解决方案