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 ...
随机推荐
- OAuth 白话简明教程 4.刷新 Access Token
转自:http://www.cftea.com/c/2016/11/6705.asp OAuth 白话简明教程 1.简述 OAuth 白话简明教程 2.授权码模式(Authorization Code ...
- ng-深度学习-课程笔记-2: 神经网络中的逻辑回归(Week2)
1 二分类( Binary Classification ) 逻辑回归是一个二分类算法.下面是一个二分类的例子,输入一张图片,判断是不是猫. 输入x是64*64*3的像素矩阵,n或者nx代表特征x的数 ...
- mongodb的存储引擎
mongodb版本为3.4 mongodb存储引起的一些概述 存储引擎是MongoDB的核心组件,负责管理数据如何存储在硬盘和内存上.从MongoDB 3.2 版本开始,MongoDB 支持多数据存储 ...
- Linux基础入门第三节(修改)
第三节 作业部分 添加一个用户loutest,使用sudo创建文件/opt/forloutest,设置成用户loutest可以读写.截图并把操作过程写入实验报告. 找到了解决的办法,在touch命令前 ...
- 封装JS实现Ajax
这两天仔细理解了一下Ajax,然后整理封装了一下,如果有什么不对的地方,请指教,谢谢! AJAX AJAX = Asynchronous JavaScript and XML(异步的 JavaScri ...
- HDU 3065 病毒侵袭持续中(AC自动机)题解
题意:要你找到主串中每个模式串的个数. 思路:题目都没说是多组数据,结果没while(~)直接WA了,和上一题差不多,可以用map或者开个数组储存.指针要记得回收内存,不然MLE. #include& ...
- UVa 1635 无关的元素(唯一分解定理+二项式定理)
https://vjudge.net/problem/UVA-1635 题意: 给定n个数a1,a2,...an,依次求出相邻两数之和,将得到一个新数列.重复上述操作,最后结果将变成一个数.问这个数除 ...
- $.proxy用法详解
jQuery中的$.proxy官方描述为: 描述:接受一个函数,然后返回一个新函数,并且这个新函数始终保持了特定的上下文语境. 官方API: jQuery.proxy( function, conte ...
- Libpacp 深度剖析
Libpacp 深度剖析 1. Libpacp 的工作原理 Libpcap的工作原理可以描述为,当一个数据包到达网卡时,通过网络分接口(即旁路机制)将数据包发给BPF过滤器,匹配通过的数据包可以被 ...
- 《高级Web应用程序设计》课程学习(20170911)
一.课程内容 本学期课件,点击查看 二.作业相关 上交作业的方法 访问ftp://192.168.42.254:22,登录后找到自己的姓名文件夹,放入作业即可.登录账号为stu1,密码为空 作业列表, ...