模板是一个 包含响应文本的文件,其中包含用占位符表示的动态部分。
User
Hello,{{ name }}
#{{ name }} 就是动态部分
使用真实值替换变量,再返回最终得到的响应字符串,这一过程就是渲染。
from flask import render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/user/')
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子文件夹中。
之前使用{{ 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文件:
jinjia2模板测试
使用字典变量:{{mydict["type"]}}
使用列表变量:{{mylist[0]}}
使用普通函数变量:{{mylist[0]}}
使用普通函数变量:{{myfunc()}}
使用使用类方法变量:{{myclass.func()}}
在html文件中 ,就可以直接使用这四种类型了(当然,主要是表现逻辑,值主要也是用于显示的):{{ mydict["type"] }}, {{ mylist[0] }}, {{ myfunc() }}, {{ myclass.func() }}