Fork me on GitHub

Flask之模板系统

一、模板的基础方法

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>
index.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>
index.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>

 

 

 

 

 

posted @ 2020-07-03 23:15  iveBoy  阅读(294)  评论(0编辑  收藏  举报
TOP