flask--Jinja2模板{% if %}标签 、{% for %}标签、测试器的使用

本文介绍了Jinja2模板语言中的if和for控制结构的使用方法,包括条件判断、循环遍历、测试器等特性,以及如何利用这些结构对页面内容进行动态控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在模板中,有时候我们避免不了对某些变量做一些判断,来实现我们的需求,而Jinja2模板也给我们提供了这个标签。

1. {% if %}标签

和python中的if语句相似,可以使用<,>,<=,>=,==,!=来进行判断,也可以通过and,or,not,()来进行逻辑合并操作。

假设我们在视图中传入了一个变量age,我们就可以根据age不同的值,在页面显示不同的信息.

{% if age < 18 %}
    <p>还未成年,不能进网吧上网</p>
{% elif age == 18 %}
    <p>刚刚成年,先去庆祝一下吧,再去上网</p>
{% else %}
    <p>已经成年了,可以去网吧上网了</p>
{% endif %}

上面我们就通过if语句,对页面显示内容做了处理。

2. {% for %}标签

for循环可以遍历任何一个序列,包括列表,字典,元祖,并且可以反向遍历。

  • 普通的遍历
<ul>
    {% for user in users %}
        <li>{{ user }}</li>
<!--  如果没有值,空的列表之类的,就会执行else语句 -->
    {% else %}
        <li>没有任何值</li>
    {% endfor %}
</ul>
  • 遍历字典
        {% for key,value in person.items() %}
		<!--{% for key in person.keys() %}   遍历字典的key  -->
		<!--{% for value in person.values() %}  遍历字典的值  -->
             <p>{{ key }} =>  {{ value }}</p>
         {% endfor %}

但是在Jinja2模板中,没有continuebreak语句,所以我们不能使用他们来控制我们的循环。但是Jinja2模板给我们提供了for循环中的其他一些变量。

变量作用
loop.index0当前迭代对象的索引,从0开始
loop.index当前迭代对象的索引,从1开始
loop.revindex当前循环的反向索引,比如序列的长度为5,那么第一次循环这个值就为5,接下来每次减一
lopp.revindex0当前循环的反向索引,从0开始,所以第一次的值为loop.length-1
loop.first是否为第一次迭代,反回True或False
loop.last是否为最后一次迭代,返回True或False
loop.length序列的长度
loop.previtem当前循环值得上一个值,如果为序列中的第一个值,那么上一个值就为空
loop.nextitem当前循环值得下一个值,如果为序列中的最后一个值,那么下一个值就为空
loop.cycle()辅助循环,看下面的例子
  • loop.cycle()的使用
<!-- 假设 value=[1,2,3,4,5,6,7] -->
{% for value in values %}
	<p class="{{ lopp.cycle('one','two') }}">{{ value }}</p>
{% endfor %}

<!-- 出来的效果为 -->
<p class="one">1</p>
<p class="two">2</p>
<p class="one">3</p>
<p class="two">4</p>
<p class="one">5</p>
<p class="two">6</p>
<p class="one">7</p>

在for循环中,也可以嵌套if语句。我们一九九乘法表为例:

  • 不使用if
<table border="1">
    <tbody>
        {% for row in range(1,10) %}
            <tr>
                {% for colum in range(1,row+1) %}
                    <td>{{ row }} * {{ colum }} = {{ row*colum }}</td>
                {% endfor %}
            </tr>
        {% endfor %}
    </tbody>
</table>
  • 使用if
<table border="1">
    <tbody>
        {% for row in range(1,10) %}
            <tr>
                {% for colum in range(1,10) if colum <= row %}
                    <td>{{ row }} * {{ colum }} = {{ row*colum }}</td>
                {% endfor %}
            </tr>
        {% endfor %}
    </tbody>
</table>
  • for标签中嵌套if标签
<table border="1">
    <tbody>
        {% for row in range(1,10) %}
            <tr>
                {% for colum in range(1,10) %}
                    {% if colum <= row %}
                        <td>{{ row }} * {{ colum }} = {{ row*colum }}</td>
                    {% endif %}
                {% endfor %}
            </tr>
        {% endfor %}
    </tbody>
</table>

测试器的使用

测试器主要是用来判断一个值是否满足某种类型,如果我们不使用测试器的话就非常不好判断。

语法如下:

  • 一个参数测试器的使用方法
{% if <variable> is defined %}
    do something ...
{% else %}
    do something ...
{% endif %}

上面的代码是判断<variable>这个变量是否已经被定义.Jinja2中还有很多其他的测试器。

  • 两个参数的测试器的使用方法
{% if 9 is divisibleby 3 %}
    <p>9能被三整除</p>
{% else %}
    <p>9不能被三整除</p>
{% endif %}
测试器描述信息
callable(object)是否可调用
defined(object)是否被定义
escaped(object)是否应景被转义了
upper(object)是否全部大写
lower(object)是否全部小写
string(object)是否是一个字符窜
sequence(object)是否是一个序列
number(object)是否是一个数字
odd(object)是否是奇数
even(object)是否是偶数
divisibleby(value,num)value是否能整除num
sameas(value, other)判断一个对象是否指向另一个对象相同的内存地址

更多的测试器可以查看Jinja2的官方文档.http://jinja.pocoo.org/docs/2.10/templates/#list-of-builtin-tests

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值