模板是一个 包含响应文本的文件,其中包含用占位符表示的动态部分。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>User</title> </head> <body> <h1>Hello,{{ name }}</h1> #{{ name }} 就是动态部分 </body> </html>
使用真实值替换变量,再返回最终得到的响应字符串,这一过程就是渲染。
一、使用Jinja2模板引擎
from flask import render_template app = Flask(__name__) @app.route('/') def index(): return render_template('index.html') @app.route('/user/<name>') def user(name): return render_template('user.html',name=name)
render_templates('user.html',name=name)。'user.html'指定使用的模板文件,name指定替换的变量。左边name表示模板中使用的占位符,是参量名;右边的name是当前的变量,里面值是要赋给模板的。
默认情况下,Flask在程序文件夹中的templates子文件夹中寻找模板。因此,user.html和index.html都要放在templates子文件夹中。
二、Jinja2模板的变量
之前使用{{ name }} 在模板中表示变量,这是一种特殊占位符,表示这个值应当在渲染时获取。
Jinja2能识别所有类型的变量,包括列表(list),字典(dict),对象(object)。
from flask import Flask from flask_script import Manager from flask import render_template app = Flask(__name__) manager = Manager(app) class MyClass: def func(self): return "func" def ord_func(): return "Ordinary function" @app.route("/") def index(): mydict = {} mydict["type"]= "dict" mylist = [] mylist.append("list") myclass = MyClass() return render_template("myDict.html", mydict=mydict, mylist=mylist, myclass=myclass, myfunc = ord_func) if __name__ == "__main__": manager.run()
分别定义了dict,list,class,function四种类型,然后传递给模板myDict.html。
再来看html文件:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>jinjia2模板测试</title> </head> <body> <h1>使用字典变量:{{mydict["type"]}}</h1> <h1>使用列表变量:{{mylist[0]}}</h1> <h1>使用普通函数变量:{{mylist[0]}}</h1> <h1>使用普通函数变量:{{myfunc()}}</h1> <h1>使用使用类方法变量:{{myclass.func()}}</h1> </body> </html>
在html文件中 ,就可以直接使用这四种类型了(当然,主要是表现逻辑,值主要也是用于显示的):{{ mydict["type"] }}, {{ mylist[0] }}, {{ myfunc() }}, {{ myclass.func() }}