flask中jinjia2模板引擎使用详解4
接上文
For循环
和其它编程语言一样,for用来编辑列表中的项。下面以一个例子来说明for在flask的jinjia2模板中的使用。
创建一个模板list.html
代码如下:
{% extends "base.html" %} {% block content %} {% for user in users %} <li>{{ user }}</li> {% endfor %} {% endblock %}
在code.py中添加url规则
@app.route("/tmpl/list") def renderList(): users = ["zhang san","li si","wang wu"] return render_template("list.html",users = users)
运行效果如下:
变量
描述
loop.index
当前循环迭代的次数(从 1 开始)
loop.index0
当前循环迭代的次数(从 0 开始)
loop.revindex
到循环结束需要迭代的次数(从 1 开始)
loop.revindex0
到循环结束需要迭代的次数(从 0 开始)
loop.first
如果是第一次迭代,为 True 。
loop.last
如果是最后一次迭代,为 True 。
loop.length
序列中的项目数。
loop.cycle
在一串序列间期取值的辅助函数。见下面的解释。
我们以上面的例子来说明其中几个变量的使用
{% for user in users %} <li>{{ user }},"first:"{{ loop.first }},"last:"{{ loop.last }},"length:"{{ loop.length }},"index:"{{ loop.index }},"index0:"{{ loop.index0 }},"revindex:"{{ loop.revindex }},"revindex0:"{{ loop.revindex0 }},"cycle:"{{ loop.cycle("1","2") }}</li> {% endfor %}
运行效果:
通过if内联过滤来筛选数据
Jinjia2模板中的循环不支持break和continue语法。
可以通过if内联过滤来筛选数据,举例:
<h4>长度大于6的:</h4> {% for user in users if user| string | length >6 %} <li>{{ user }},"first:"{{ loop.first }},"last:"{{ loop.last }},"length:"{{ loop.length }},"index:"{{ loop.index }},"index0:"{{ loop.index0 }},"revindex:"{{ loop.revindex }},"revindex0:"{{ loop.revindex0 }},"cycle:"{{ loop.cycle("1","2") }}</li> {% endfor %}
运行效果:
Li si因长度小于6,未被显示出来
使用else来处理空列表
当一个for循环的数据源为空时,可以用else进行替换方案显示,比如我们for一个不存在的对象items,然后用else作判断:
<h4>空列表</h4> {% for item in items %} <li>{{ item }}</li> {% else %} <li>未找到数据 </li> {% endfor %}
运行效果:
递归调用for循环
通过在for中使用recursive 关键字,并且在需要递归的地方使用loop方法就可以实现递归调用for循环
引用官方的例子如下:
<ul > {%- for item in sitemap recursive %} <li><a href="{{ item.href|e }}">{{ item.title }}</a> {%- if item.children -%} <ul >{{ loop(item.children) }}</ul> {%- endif %}</li> {%- endfor %} </ul>
原文出处:zhihu -> https://zhuanlan.zhihu.com/p/34291407
本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如果侵犯你的利益,请发送邮箱到 [email protected],我们会很快的为您处理。