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