flask之模板
模板的使用
Flask使用的是Jinja2模板,所以其语法和Django无差别
1.每一个模板中都可以调用的函数
@app.template_global() def ad(a1,a2): """ 每个模板中可以调用的函数 :param a1: :param a2: :return: """ return a1+a2
2.为了防止xss攻击,加了验证,页面上显示的是字符串的形式,我们不想让他这样显示,所以有两种方式
方式一:在后端导入Markup
from flask import Flask,render_template,redirect,jsonify,make_response,Markup
def gen_input(value):
return Markup("<input value='%s'/>" %value)
方式二:
在前端加|safe
<h1>{{k5(99)|safe}}</h1>
3.模板继承
和django的一样,extends
4.举例
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 %}