jinja2 是 Flask 作者开发的一个模板系统,起初是仿 Django 模板的一个模板引擎,为 Flask 提供模板支持,由于其灵活,快速和安全等优点被广泛使用。当我们开发 Web 应用程序时,通常需要将数据动态地渲染到 HTML 模板中,而 Python jinja2 模版技术正是为此而生的。
要了解jinja2,那么需要先理解模板的概念。模板在 Python 的web开发中广泛使用,它能够有效的将业务逻辑和页面逻辑分开,使代码可读性增强、并且更加容易理解和维护。
模板简单来说就是一个其中包含 占位变量 表示 动态 部分的文件,模板文件在经过动态赋值后,返回给用户。
app.py文件
@app.route('/')
def hello_world() :
return render_template('index.html')
@app.route('/detail')
def detail():
user_id = request.args.get("user_id", default=1, type=str)
name = request.args.get("name", default='baidie',type=str)
return render_template("blog_detail.html",userid=user_id,uname=name)
blog_detail.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>博客详情</title>
</head>
<body>
<h1>你的用户id是{{ userid }}</h1>
<h1>你访问的用户姓名是{{ uname }}</h1>
</body>
</html>
-
基本语法:
jinjia的基本语法语python很相似,包括变量、表达式、控制结构等
<!-- 变量 --><p>Hello, {{ name }}!</p> <!-- 表达式 --> {% if count > 10 %} <p>There are too many items.</p> {% else %} <p>There are {{ count }} items.</p> {% endif %} <!-- 循环 --><ul> {% for item in items %} <li>{{ item }}</li> {% endfor %} </ul>
-
模板访问对象属性和字典:
1.访问对象属性
app.py文件
from flask import Flask,render_template,request # __name__表示当前app.py这个模板 app = Flask(__name__) # 定义一个User类 class User: def __init__(self, username, email): self.username = username self.email = email @app.route('/detail') def detail(): # user_id = request.args.get("user_id", default=1, type=str) # name = request.args.get("name", default='baidie',type=str) # 创建一个User类的对象 user=User(username='baidie',email='3188@qq.com') return render_template("index.html",yonghu=user) if __name__ == '__main__' : app.run(debug=True)
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>知了传课</title> </head> <body> <h1>用户名字是{{ yonghu.username }}</h1> <h1>用户的邮箱是{{ yonghu.email }}</h1> </body> </html>
2.访问字典
app.py文件
from flask import Flask,render_template,request # __name__表示当前app.py这个模板 app = Flask(__name__) # 定义一个User类 class User: def __init__(self, username, email): self.username = username self.email = email @app.route('/detail') def detail(): # user_id = request.args.get("user_id", default=1, type=str) # name = request.args.get("name", default='baidie',type=str) # 创建一个User类的对象 user = User(username='baidie',email='3188@qq.com') # 创建字典 user_id = { "username":"xiaoming", "email":"20212@email" } return render_template("index.html", yonghu=user, user_id=user_id) if __name__ == '__main__' : app.run(debug=True)
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>知了传课</title> </head> <body> <h1>用户名字是{{ yonghu.username }}</h1> <h1>用户的邮箱是{{ yonghu.email }}</h1> <h1>字典的元素访问的两种方式</h1> <h1>你访问的用户:{{ user_id.username }}</h1> <h1>你访问的用户:{{ user_id.email }}</h1> <h1>你访问的用户:{{ user_id['username'] }}</h1> <h1>你访问的用户:{{ user_id['email'] }}</h1> </body> </html>