欢迎来到Louis的博客

人生三从境界:昨夜西风凋碧树,独上高楼,望尽天涯路。 衣带渐宽终不悔,为伊消得人憔悴。 众里寻他千百度,蓦然回首,那人却在灯火阑珊处。
扩大
缩小

Flask - 模版(Jinja2)

一.渲染模板

from flask import Flask, render_template

app = Flask(__name__)


@app.route('/')
def index():
    return render_template('index.html')


@app.route('/user/<name>')
def user(name):
    return render_template('user.html', name=name)


if __name__ == '__main__':
    app.run(debug=True)

  render_template用法,第一个参数为模板的名称,后续的参数为传入到模板中的变量

user.html

    <h1>Hello,{{ name }}</h1>

二.变量

1.变量

  Jinja2能够识别所有类型的变量,甚至是一些复杂的类型,例如字典,列表和对象。

hello.py

from flask import Flask, render_template

app = Flask(__name__)


@app.route('/')
def index():
    return render_template('index.html')


class Person(object):
    def __init__(self, name, age, gender='male'):
        self.name = name
        self.age = age
        self.gender = gender

    def get_name(self):
        return self.name


@app.route('/user/<name>')
def user(name):
    l1 = [1, 2, 3, 4, 5, 6, 7]
    d1 = {'k1': 'v1', 'k2': 'v2'}
    p1 = Person('alex', '30')
    return render_template('user.html', name=name, l1=l1, p1=p1, d1=d1)


if __name__ == '__main__':
    app.run(debug=True)

user.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>Hello,{{ name }}</h1>
{{ l1.__len__() }}
{{ d1.get('k1') }}
{{ p1.age }}
{{ p1.get_name() }}
</body>
</html>

2.过滤器

  可以使用过滤器修改变量,过滤器名添加在变量名之后,用竖线隔开

# 将输出的名字首字母变成大写 
{{ p1.get_name() | capitalize }}

常用的Jinja2变量过滤器

safe             渲染值时不转义
capitalize      把单词的首字母变成大写,其他字母变成小写
lower           把单词转换为小写
upper           把单词转换为大写
title              把值中的每个单词的首字母都转换为大写
trim              把值的首尾空格去掉
striptags       渲染之前把值中所有的HTML标签都删掉

safe过滤器特别说明一下,默认情况下,出于安全考虑,Jinja2会转义变量中所有的标签,所以在使用safe时绝对不要在不可信的值上使用safe过滤器,比如用户在表单中输入的文本。

三.控制结构

  Jinja2提供了多种控制结构,可用来改变模版的渲染流程。

if else

{% if user %}
    <h1>Hello,{{ user }}</h1>
{% else %}
    <h1>Hello,Stranger</h1>
{% endif %}

 

posted on 2019-01-09 21:12  Louiszj  阅读(154)  评论(0)    收藏  举报

导航