模板的使用html
Flask使用的是Jinja2模板,因此其語法和Django無差異前端
1.每個模板中均可以調用的函數django
@app.template_global() def ad(a1,a2): """ 每一個模板中能夠調用的函數 :param a1: :param a2: :return: """ return a1+a2
2.爲了防止xss攻擊,加了驗證,頁面上顯示的是字符串的形式,咱們不想讓他這樣顯示,因此有兩種方式json
方式一:在後端導入Markupflask
from flask import Flask,render_template,redirect,jsonify,make_response,Markup def gen_input(value): return Markup("<input value='%s'/>" %value)
方式二:後端
在前端加|safeapp
<h1>{{k5(99)|safe}}</h1>
3.模板繼承xss
和django的同樣,extends函數
4.舉例spa
s1.py
from flask import Flask,render_template,redirect,jsonify,make_response,Markup app = Flask(__name__) @app.template_global() def ad(a1,a2): """ 每一個模板中能夠調用的函數 :param a1: :param a2: :return: """ return a1+a2 def gen_input(value): # return Markup("<input value='%s'/>" %value) return "<input value='%s'/>" %value @app.route('/index',methods=['GET','POST']) def index(): context = { 'k1':123, 'k2':[11,22,33], 'k3':{'name':'oldboy','age':73}, 'k4':lambda x:x+1, 'k5':gen_input, } return render_template('index.html',**context) @app.route('/x2',methods=['GET','POST']) def order(): context = { 'k1':123, 'k2':[11,22,33], } return render_template('order.html',**context) if __name__ == '__main__': app.run()
templates
layout.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div>頭部</div> <div> {% block content%} {% endblock%} </div> <div>底部</div> </body> </html>
index.html
{% extends 'layout.html'%} {% block content%} <h1>{{k1}}</h1> <h1>{{k2.0}} {{k2[1]}}</h1> <h1>{{k3.name}} {{k3['age']}} {{k3.get('name',888)}} </h1> <h1>{{k4(66)}} </h1> <!--<h1>{{k5(99)}} </h1>--> <h1>{{ad(1,2)}} </h1> {% endblock %}
order.html
{% extends 'layout.html'%} {% block content%} <h1>{{ad(1,2)}} </h1> {% endblock %}