flask第二十六篇——模板【控制语句】【2】
如果你也在学flask,就请加船长的公众号:自动化测试实战
我们先补充一下for循环
的知识,我们之前说过,flask是由Jinja2+sqlAlchemy+werkzeug
组成的,我们现在学的控制语句就属于Jinja
的知识了。
在Jinja2
中的for
循环包含以下变量,用来获取当前遍历的状态:
变量 | 描述 |
---|---|
loop.index | 当前迭代的索引(从1开始) |
loop.index0 | 当前迭代的索引(从0开始) |
loop.first | 是否是第一次迭代,返回True/False |
loop.last | 是否是最后一次迭代,返回True/False |
loop.length | 序列的长度 |
比如我们判断如果是最后一次迭代,那么就把那一行标红,就可以这么写:
- <h3>遍历中的变量</h3>
- <table>
- <thead>
- <th>姓名</th>
- <th>年龄</th>
- </thead>
- <tbody>
- {% for user in users %}
- <p>{{ loop.index }}</p>
- {% if loop.last %}
- <tr style="background: firebrick;">
- {% else %}
- <tr>
- {% endif %}
- <td>{{ user.name }}</td>
- <td>{{ user.age }}</td>
- </tr>
- {% endfor %}
- </tbody>
- </table>
此外,在flask中,是没有continue
和break
来中断for循环的,那我们要停止for循环该怎么办呢?我们就需要借助if进行判断了,比如下面的代码,我先循环整个users列表,然后判断,如果name是Warren,name就用表格打印出姓名和年龄:
- # coding: utf-8
- from flask import Flask, render_template
- app = Flask(__name__) # type: Flask
- app.debug = True
- @app.route('/')
- def login():
- context = {
- "users": [
- {
- "name": "Warren",
- "age": 18
- },
- {
- "name": "Captain",
- "age": 20
- }
- ],
- "groups": {
- "math": "perfect",
- "Chinese": "Great"
- }
- }
- return render_template('index.html', **context)
- if __name__ == '__main__':
- app.run()
index.html
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>控制语句</title>
- </head>
- <body>
- {# 如果姓名name是Warren,就打印名字,否则打印其他信息 #}
- {% if users[0].name == "Warren" %}
- <p>{{ users[0].name }}</p>
- <p>用户名是Warren</p>
- {% else %}
- <p>用户名不是Warren</p>
- {% endif %}
- {# for循环 #}
- <h3>遍历列表</h3>
- <table>
- <thead>
- <th>姓名</th>
- <th>年龄</th>
- </thead>
- <tbody>
- {% for user in users %}
- <tr>
- <td>{{ user.name }}</td>
- <td>{{ user.age }}</td>
- </tr>
- {% endfor %}
- </tbody>
- </table>
- <h3>遍历字典</h3>
- {% for key, value in groups.items() %}
- <p>key: {{ key }};value: {{ value }}</p>
- {% endfor %}
- <h3>遍历中的变量</h3>
- <table>
- <thead>
- <th>姓名</th>
- <th>年龄</th>
- </thead>
- <tbody>
- {% for user in users %}
- <p>{{ loop.index }}</p>
- {% if loop.last %}
- <tr style="background: firebrick;">
- {% else %}
- <tr>
- {% endif %}
- <td>{{ user.name }}</td>
- <td>{{ user.age }}</td>
- </tr>
- {% endfor %}
- </tbody>
- </table>
- <h3>中途断开for循环</h3>
- <table>
- <thead>
- <th>姓名</th>
- <th>年龄</th>
- </thead>
- <tbody>
- {% for user in users if user.name == 'Warren' %}
- <tr>
- <td>{{ user.name }}</td>
- <td>{{ user.age }}</td>
- </tr>
- {% endfor %}
- </tbody>
- </table>
- </body>
- </html>
最后执行代码,可以看到:
大家需要自己动手写一下,这样才能记得深刻。
今天我们给大家留个作业,就是用学的for循环写一个九九乘法表,明天我们会公布答案,大家可以自己试一下,看看自己学的怎么样~~
如果觉得有帮助,别忘了动动小手,点个赞哦~~
flask第二十六篇——模板【控制语句】【2】的更多相关文章
- flask第二十二篇——模板【4】过滤器
请关注微信公众号:自动化测试实战 先来教大家一个pycharm设置默认模板的方法.我们每次新建模板或者平时写代码打开以后可能都要重复写# coding: utf-8这些代码,其实我们可以设置好模板,让 ...
- flask第二十四篇——模板【6】自定义过滤器
请关注孟船长的公众号:自动化测试实战 大家想了解其他过滤器可以参考这里: http://jinja.pocoo.org/docs/dev/templates/#builtin-filters ---- ...
- flask第二十五篇——控制语句
有兴趣的请加船长公众号:自动化测试实战 先和大家强调一个发邮件的问题 # coding: utf-8 import smtplib from email.mime.text import MIMETe ...
- flask第十九篇——模板【3】
请关注微信公众号:自动化测试实战 今天我们继续模板的知识,现在我们增加字典的复杂度,这个时候在render_template第二个参数可以传**title,以后我们会用**context代替原来的ti ...
- flask第十八篇——模板【2】
请关注公众号:自动化测试实战 上一节我们介绍了模板的基本使用方法,现在我们想一个问题,如果把index.html放到template文件夹下面的文件夹该怎么办呢?其实很容易,当文件夹结构如下图所示时: ...
- 第二十六篇:两个SOUI新控件 ---- SListView和SComboView(借用Andorid的设计)
SOUI原来实现的SListBoxEx的效率一直是我对SOUI不太满意的地方.包括后来网友实现的SListCtrlEx. 这类控件为每一个列表项创建一个SWindow来容纳数据,当数据量比较大(100 ...
- Flask最强攻略 - 跟DragonFire学Flask - 第十六篇 Flask-Migrate
终于到了Flask-Migrate,之前在学习Flask-SQLAlchemy的时候,有的同学就提过类似的问题,Flask支持 makemigration / migrate 吗? 答案在这里该诉你, ...
- 第二十六篇 jQuery 学习8 遍历-父亲兄弟子孙元素
jQuery 学习8 遍历-父亲兄弟子孙元素 jQuery遍历,可以理解为“移动”,使用“移动”还获取其他的元素. 什么意思呢?老师举一个例子: 班上30位同学,我是新来负责教这个班学生的老师 ...
- 第二十六篇-单击事件、Toast(提示框信息)
单击事件有3种方法: 第一种: layout.xml <?xml version="1.0" encoding="utf-8"?> <Line ...
随机推荐
- 77. Combinations(回溯)
Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. Example: I ...
- Action<>和Func<> 区别
其实他们两个都是委托[代理]的简写形式. 一.[action<>]指定那些只有输入参数,没有返回值的委托 Delegate的代码: public delegate void myDeleg ...
- centOS下升级python版本,详细步骤
1.可利用linux自带下载工具wget下载,如下所示:( 笔者安装的是最小centos系统,所以使用编译命令前,必须安装wget服务,读者如果安装的是界面centos系统,或者使用过编译工具则可跳 ...
- InFusion错误类型分析
1 God Class 1.1 特征 上帝类通常过多的操纵其他类的数据,从而破坏了类的封装性.上帝类从其他类中获得功能,同时增加了自身的耦合性,通常会导致自己具有规模过大和较高的复 ...
- 【转载】JS Number类型数字位数及IEEE754标准
JS的基础类型Number,遵循 IEEE 754 规范,采用双精度存储(double precision),占用 64 bit.如图 意义 1位用来表示符号位 11位用来表示指数 52位表示尾数 浮 ...
- Http请求中Content-Type
1. Content-Type MediaType,即是Internet Media Type,互联网媒体类型:也叫做MIME类型,在Http协议消息头中,使用Content-Type来表示具体请求 ...
- 【运维技术】从零开始搭建开发使用的Kafka环境
[原创]从零开始搭建开发使用的Kafka环境 入门资料 百度百科: Kafka是一种高吞吐量的分布式发布订阅消息系统,这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决. 对于像Hadoop ...
- BZOJ2221: [Jsoi2009]面试的考验
传送门 一句话题意,给定一个序列,询问区间内差值的绝对值的最小值. 这道题之前见过一次,似乎是在一次UER上,那一道题当时是用了近似算法才能过. 数据保证数列随机. 这道题显然非常适合离线的做法,考虑 ...
- Java编程学习之JDBC连接MySQL
JDBC连接MySQL 一.对JDBC连接数据库的步骤1.加载数据库驱动//加载驱动Class.forName(driverClass)-------------------------------- ...
- windows10下如何进行源码编译安装tensorflow
1.获取python3.5.x https://www.python.org/ftp/python/3.5.4/python-3.5.4-amd64.exe 2.安装python3.5.x,默认安装即 ...