Bootstrap

Jinja2常用模板语言(条件判断if,循环遍历for,过滤器)

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')
;