一、模板的基础方法
Flask使用的是Jinja2模板,其语法与Django框架中模板系统一样,与模板相关联的方法有:
- render_template
- Markup
- jsonify
- make_response
- macro
二、基础方法的使用
1、render_template
该方法是对模板的渲染,相当于django中的render方法:
from flask import Flask, render_template app = Flask(__name__) @app.route('/') def index(): data = [ {'username': '张三', 'age': 12}, {'username': '李四', 'age': 22}, ] return render_template('index.html', data=data) if __name__ == '__main__': app.run()
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {{data}} {% for obj in data %} {{ obj }} {% endfor %} </body> </html>
2、Markup
Markup其实相当于django中的make_safe,在Jinja2的模板中可以是safe对html进行转义,同时flask中也可以使用Markup:
from flask import Flask, render_template, Markup app = Flask(__name__) def html(): html_str = Markup("<a href='#'>点击我</a>") return html_str @app.route('/') def index(): return render_template('index.html', func=html) if __name__ == '__main__': app.run()
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {{func()}} </body> </html>
3、jsonify
顾名思义返回的数据时json数据,该方法可以用作返回接口数据。
from flask import Flask, jsonify app = Flask(__name__) @app.route('/') def index(): return ({'a': 1, 'b': 2}) # 或者 return jsonify(a='1',b='2') if __name__ == '__main__': app.run()
4、make_response
之前的render_template是可以直接返回数据给模板的,但是假如你想在返回页面之前对response在进行一下加工,比如加入cookie、headers之类的参数,该方法就可以使用。
from flask import Flask, render_template, make_response app = Flask(__name__) @app.route('/') def index(): response = make_response(render_template('index.html', num=56)) response.headers['X-Parachutes'] = 'parachutes are cool' return response if __name__ == '__main__': app.run()
5、macro
使用在html模板中,可以在该参数范围内定义一个代码块,并且可进行调用。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {% macro func(name) %} <!--定义func函数,有name形参--> {{ name }} {% endmacro %} {{ func('小明') }} <!--调用func函数,并且传递参数--> </body> </html>