Flask模板介绍
- Flask使用的是Jinja2模板,所以其语法和Django无差别;可以参考Django语法学习
- 用之前,也需要新建
templates
文件夹,在该文件夹下放置模板文件 - Flask的模板系统也支持 母版的继承,块儿的继承,include等语法;同样也支持for、if等语法;
- 也就是说Flask的模板系统同Django的模板系统基本相同
- Jinja2模板的语法比Django模板的语法更接近python语法的使用
Flask模板的使用
视图文件:index.py
from flask import Flask,render_template,redirect,Markup
app = Flask(__name__)
def gen_input(value):
return "<input value='%s' />" % value
def gen_input2(value):
return Markup("<input value='%s' />" % value) # Markup可以显示个人确认安全的内容到模板文件,不需要单独在模板文件中用safe
@app.template_global()
def global_func(x,y):
'''
通过@app.template_global()装饰器,将global_func(x,y)函数添加到模板的全局变量中,每个模板中都可以调用;不需要单独传递到前端
:param x:
:param y:
:return:
'''
return x+y
@app.route('/index',methods=['GET','POST'])
def index():
content = {
'k1':888,
'k2':[11,22,33],
'k3':{'name':'mlg','age':18},
'k4':lambda x:x+2,
'k5':gen_input,
'k6':gen_input2,
}
return render_template('index.html',**content)
@app.route('/index2')
def index2():
return render_template('index2.html')
if __name__ == '__main__':
app.run()
说明:
- jinja2的语法与Django的语法基本相同,可参考之前Django的模板内容学习具体知识点
- 视图函数往前端传递函数时不执行,所以我们可以自己通过往前端传递参数再调用
@app.template_global()
装饰器,可以把一个函数定义为模板的全局函数,在所有的模板文件中都能调用
模板文件
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>index</title>
</head>
<body>
<h1>{{k1}}</h1>
<h1>{{k2.0}}--{{k2[0]}}</h1>
<h1>{{k3.name}}--{{k3['name']}}--{{k3.get('name',888)}}</h1>
<h1>{{k4}}</h1>
<h1>{{k4(5)}}</h1>
<h1>{{k5(88)}}</h1> <!--防止XSS攻击,需要加 管道符+safe -->
<h1>{{k5(88)|safe}}</h1>
<h1>{{k6(99)}}</h1>
<h1>{{global_func(1,2)}}</h1>
</body>
</html>
index2.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>index2</title>
</head>
<body>
<h1>{{global_func(1,2)}}</h1>
</body>
</html>