python开发前后端不分离web项目的时候,前端通常使用jinja2模板语言。现在介绍一下jinja2模板语言的基本语法。
一、普通变量
变量表示
格式:{{ 变量名 }}
from flask import Flask
from flask import render_template
app = Flask(__name__)
@app.route('/strtest/')
def test():
s = "Hello"
return render_template('strtest.html', s=s)
if __name__ == "__main__":
app.run(host='0.0.0.0', port=8888)
<body>
<h1>flask</h1>
<p>
{{ s }}
</p>
</body>
测试:
二、for循环控制
格式:
{% for item in list %}
list不为空时执行语句
{% else %}
list为空时执行默认语句
{% endfor %}
测试:
@app.route('/strtest/')
def test():
l = []
return render_template('strtest.html', l=l)
<h1>Flask</h1>
{% for item in l %}
{{ item }}
{% else %}
{{ 'ddddd' }}
{% endfor %}
三、if条件判断
格式:
{% if 条件1 %}
语句块1
{% elif 条件2 %}
语句块2
{% else %}
不符合所有条件
{% endif %}
测试:
@app.route('/strtest/')
def test():
l = ['sdfdad', 'asdf', 'sadfadsfdasdsf', 'sdfdsfdfdf']
return render_template('strtest.html', l=l)
<body>
<h1>Flask</h1>
{% for item in l %}
{% if item|length > 6 %}
{{ item }} <br>
{% elif item|length > 5 %}
{{ 'www' }} <br>
{% else %}
{{ 'qqq' }} <br>
{% endif %}
{% endfor %}
</body>
四、过滤器
过滤器可以对变量加以滤器修改。过滤器通过管道符号(|)与变量分隔,并且在括号中可以包含可选参数。一个变量可以链接多个过滤器。一个过滤器的输出可以应用于下一个过滤器。
官方过滤器api:http://jinja.pocoo.org/docs/2.10/templates/#builtin-filters
过滤器格式:{{ 变量|过滤器1|过滤器2|… }}
4.1 字符串过滤器
将’hello’转大写字母
{{ 'hello'|upper }}
将’hello’反转
{{ 'hello'|reverse }}
首字母大写
{{ 'hello'|title }}
首字母大写后反转
{{ 'hello'|title|reverse }}
常用过滤器列表
过滤器 说明
safe 禁止转义,渲染时不会转义特殊字符
capitallize 把首字母转大写,其他的字母转小写
lower 把所有的字母转小写
upper 把所有字母转大写
title 把每个单词的首字母转大写
trim 去掉首尾空格
striptags 去掉所有的HTML标签
join 将多个值拼接成字符串,类似python的join()函数
replace 替换字符串的值
round 对数字四舍五入
int 转换成int类型
4.2 列表过滤器
获取第一个元素
{{ list1|first }}
获取列表最后一个元素
{{ list1|last }}
列表排序
{{ list1|sort }}
列表求和
{{ list1|sum }}
求列表长度
{{ list1|length }}
4.3 自定义过滤器
自定义一个列表反转的过滤器
4.3.1 通过装饰器添加
@app.template_filter('listreverse')
def list_reverse(li: list):
li.reverse()
return li
测试:
@app.template_filter('listreverse')
def list_reverse(li: list):
li.reverse()
return li
@app.route('/strtest/')
def test():
l = ['sdfdad', 'asdf', 'sadfadsfdasdsf', 'sdfdsfdfdf']
return render_template('strtest.html', l=l)
<body>
<h1>Flask</h1>
{% for item in l|listreverse %}
{{ item }} <br>
{% endfor %}
</body>
4.3.2 通过app实例添加
def list_reverse(li: list):
li.reverse()
return li
app.add_template_filter(list_reverse, 'lireverse')
测试:
from flask import Flask
from flask import render_template
app = Flask(__name__)
def list_reverse(li: list):
li.reverse()
return li
@app.route('/strtest/')
def test():
l = ['sdfdad', 'asdf', 'sadfadsfdasdsf', 'sdfdsfdfdf']
return render_template('strtest.html', l=l)
if __name__ == "__main__":
app.add_template_filter(list_reverse, 'lireverse')
app.run(host='0.0.0.0', port=8888)
<body>
<h1>Flask</h1>
{% for item in l|lireverse %}
{{ item }} <br>
{% endfor %}
</body>