Jinja2模板引擎简介
一、Jinja2模板概述
用来展示数据的html页面,这个过程也通常称为渲染,属于Jinja2的功能 使用模板的好处:
- 视图函数只负责业务逻辑和数据处理(业务逻辑方面)
- 而模板则取到视图函数的数据结果进行展示(视图展示方面)
- 代码结构清晰,耦合度低
二、Jinja2特点
Jinja2:是 Python 下一个被广泛应用的模板引擎,是由Python实现的模板语言,他的设计思想来源于 Django 的模板引擎,并扩展了其语法和一系列强大的功能,其是Flask内置的模板语言。
模板语言:是一种被设计来自动生成文档的简单文本格式,在模板语言中,一般都会把一些变量传给模板,替换模板的特定位置上预先定义好的占位变量名。
使用render_template函数封装模板引擎
三、Jinja2模板的使用
3.1 Jinja2模板语法:
- 获取变量值:
<h1>整数:{ {number} }</h1><h1>元祖:{ {tuple[0]} }</h1><h1>列表:{ { list[0] } }</h1><h1>字典:{ { dict['key'] } }</h1>
-
分支语句if
{ % if 条件 % }
语句1
{ % else % }
语句2
{ % endif % } -
for循环
{% for 变量 in 容器 %}
语句
{% endfor%} -
注释
{# 注释内容 #}
3.2代码展示:
使用函数: render_template(‘模板文件名’,key=value)
将数据携带到,文件中进行展示
创建文件demo01.py,代码如下:
from flask import Flask,render_template
app = Flask(__name__) #默认省略了三个参数,static_url_path, static_folder, template_folders@app.route('/')
def hello_world():#定义数据,整数,字符串,元祖,列表,字典num = 10str = "hello"tuple = (1,2,3,4)list = [5,6,7,8]dict = {"name":"张三","age":13}return render_template('file01.html',my_num=num,my_str=str,my_tuple=tuple,my_list=list,my_dict=dict)if __name__ == '__main__':app.run(debug=True)
在templates文件夹下,创建文件file01.html文件,代码如下:
<h2>1.获取各种变量的值</h2><h3>整数: {{ my_num + 20}}</h3><h3>字符串: {{ my_str + " python" }}</h3><h3>元组: {{ my_tuple }}, 分开获取:{{ my_tuple[0] }}, {{ my_tuple[1] }}</h3><h3>列表: {{ my_list }}, 分开获取:{{ my_list[0] }}, {{ my_list[1] }}</h3><h3>字典: {{ my_dict }},分开获取:{{ my_dict.name }}, {{ my_dict[age] }}</h3><h2>2.遍历元祖中所有的元素</h2>{% for item in my_tuple %}<li>{{ item }}</li>{% endfor %}<h2>3.取出列表中所有偶数</h2>{% for item in my_list %}{% if item %2 == 0 %}{{ item }}{% endif %}{% endfor %}<h2>4.遍历字典内容</h2>{% for key in my_dict %}{# 如果直接是mydict.key ,那么这个key是一个字符串, 如果是 mydict[key], 那么key当成变量 #}<li>{{ key }} = {{ my_dict[key] }}</li>{% endfor %}
11_templates.py文件:
from flask import Flask,render_templateapp = Flask(__name__)@app.route("/index",methods=["GET","POST"])
def index():data = {"name":"python","age" : 18}# return render_template("index.html",name="python",age=18)# **data将字典进行解析return render_template("index.html", **data)if __name__ == '__main__':app.run(debug=True)
index.html文件:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><p>naem = {{name}}</p><p>age = {{age}}</p>
</body>
</html>
from flask import Flask,render_template
app = Flask(__name__)@app.route("/index",methods=["GET","POST"])
def index():data = {"name":"python","age" : 18,"my_dict": {"city":"sz"},"my_list": [1,2,3,4,5],"my_int": 0}# return render_template("index.html",name="python",age=18)# **data将字典进行解析return render_template("index.html", **data)if __name__ == '__main__':app.run(debug=True)
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><p>name = {{name}}</p><p>age = {{age}}</p><p>my_dict:city = {{my_dict["city"]}}</p><p>my_dict:city = {{my_dict.city}}</p><p>my_list[my_int]:{{my_list[my_int]}}</p><p>my_list[0] + my_list[1] = {{my_list[0] + my_list[1]}}</p><p>{{"hello" + " python!" }}</p></body>
</html>
3.3 扩展:
在一个 for 循环块中你可以访问这些特殊的变量: