python测试开发django-68.templates模板标签{% for %}
前言
有些标签类似这样: {% tag %} ,需要开始和结束标签 例如:{% tag %} ...标签 内容 ... {% endtag %},一般用于循环列表对象输出内容。
for 标签
{% for %} 允许我们在一个序列上迭代。与Python的 for 语句的情形类似,循环语法是 for item in iterator。
每一次循环中,模板系统会渲染在 {% for %} 和 {% endfor %} 之间的所有内容。
比如写个模板navigationbar.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% for name in name_list %}
<h1>
<span>{{ name.type }}</span>
</h1>
{% endfor %}
</body>
</html>
views视图
视图函数把列表的内容填充到模板上
from django.shortcuts import render
# 上海悠悠,QQ交流群:750815713
def navlist(request):
name_list = [
{
"type": "科普读物",
"value": ["宇宙知识", "百科知识", "科学世界", "生物世界"]
},
{
"type": "计算机/网络",
"value": ["Java", "Python", "C语言"]
},
{
"type": "建筑",
"value": ["标准/规范", "室内设计", "建筑科学", "建筑文化"]
}
]
context = {"name_list": name_list}
return render(request, "navigationbar.html", context=context)
运行后显示效果

empty标签
for ... empty ...enddor:for标签带有一个可选的{% empty %}从句,以便再给出的组是空的或者没有被找到时,给个默认值
<body>
{% for name in name_list %}
<h1>
<span>{{ name.type }}</span>
</h1>
{% empty %}
<span> 无标签 </span>
{% endfor %}
</body>
当name_list的值为空时,就会显示empty值:无标签
from django.shortcuts import render
def navlist(request):
context = {"name_list":[]}
return render(request, "navigationbar.html", context=context)
内部模板变量forloop
在{% for %}循环内部,可以访问一个名为forloop的模板变量。这个变量有若干属性,通过它们可以获知循环进程的一些信息。
- forloop.counter: 表示循环的次数。这个属性的值从 1 开始,因此第一次循环时,forloop.counter 等于 1 。
- forloop.counter0: forloop.counter0 与 forloop.counter 类似,不过是从零开始的。第一次循环时,其值为 0 。
- forloop.revcounter:forloop.revcounter的值是一个整数,表示循环中剩余的元素数量。第一次循环时, forloop.revcounter 的值是序列中要遍历的元素总数。最后一次循环时, forloop.revcounter的值为 1 。
- forloop.revcounter0:forloop.revcounter0 与 forloop.revcounter类似,不过索引是基于零的。第一次循环时, forloop.revcounter0的值是序列中元素数量减去一。最后一次循环时, forloop.revcounter0 的值为 0 。
- forloop.first:forloop.first 是个布尔值,第一次循环时为 True 。需要特殊处理第一个元素时很方便
- forloop.last:forloop.last是个布尔值,最后一次循环时为True 。经常用它在一组链接之间放置管道符号:
- forloop.parentloop:在嵌套的循环中, forloop.parentloop引用父级循环的 forloop 对象
以 forloop.last 为例,在每个链接后放管道符号,最后一个不用放
<body>
{% for name in name_list %}
<h1>
<span>{{ name.type }}</span>
</h1>
{% for n in name.value %}
<span>
{{ n }}{% if not forloop.last %} | {% endif %}
</span>
{% endfor %}
{% empty %}
<span> 无标签 </span>
{% endfor %}
</body>
显示效果

python测试开发django-68.templates模板标签{% for %}的更多相关文章
- python测试开发django-41.crispy-forms设计标签式导航菜单(TabHolder)
前言 xadmin的详情页面主要是用form_layout布局,学会了完全可以不用写html代码,也能做出很好看的页面. xadmin的html页面是用的Bootstrap3框架设计的,layout布 ...
- python测试开发django-36.一对一(OneToOneField)关系查询
前言 前面一篇在xadmin后台一个页面显示2个关联表(OneToOneField)的字段,使用inlines内联显示.本篇继续学习一对一(OneToOneField)关系的查询. 上一篇list_d ...
- python测试开发django-16.JsonResponse返回中文编码问题
前言 django查询到的结果,用JsonResponse返回在页面上显示类似于\u4e2d\u6587 ,注意这个不叫乱码,这个是unicode编码,python3默认返回的编码 遇到问题 接着前面 ...
- python测试开发django-15.查询结果转json(serializers)
前言 django查询数据库返回的是可迭代的queryset序列,如果不太习惯这种数据的话,可以用serializers方法转成json数据,更直观 返回json数据,需要用到JsonResponse ...
- 2019第一期《python测试开发》课程,10月13号开学
2019第一期<python测试开发>课程,10月13号开学! 主讲老师:上海-悠悠 上课方式:QQ群视频在线教学,方便交流 本期上课时间:10月13号-12月8号,每周六.周日晚上20: ...
- python测试开发django-rest-framework-63.基于函数的视图(@api_view())
前言 上一篇讲了基于类的视图,在REST framework中,你也可以使用常规的基于函数的视图.它提供了一组简单的装饰器,用来包装你的视图函数, 以确保视图函数会收到Request(而不是Djang ...
- Python测试开发-创建模态框及保存数据
Python测试开发-创建模态框及保存数据 原创: fin 测试开发社区 前天 什么是模态框? 模态框是指的在覆盖在父窗体上的子窗体.可用来做交互,我们经常会看到模态框用来登录.确定等等,到底是怎 ...
- 《Python测试开发技术栈—巴哥职场进化记》—前言
写在前面 今年从4月份开始写一本讲Python测试开发技术栈的书,主要有两个目的,第一是将自己掌握的一些内容分享给大家,第二是希望自己能系统的梳理和学习Python相关的技术栈.当时我本来打算以故事体 ...
- 《Python测试开发技术栈—巴哥职场进化记》—软件测试工程师“兵器库”
上文<Python测试开发技术栈-巴哥职场进化记>-初来乍到,请多关照 我们介绍了巴哥入职后见到了自己的导师华哥,第一次参加团队站会,认识了团队中的开发小哥哥和产品小姐姐以及吃到了公司的加 ...
- python测试开发django-197.django-celery-beat 定时任务
前言 django-celery-beat 可以支持定时任务,把定时任务写到数据库. 接着前面这篇写python测试开发django-196.python3.8+django2+celery5.2.7 ...
随机推荐
- 聊一聊 JS 输出为 [object object] 是怎么回事?
聊一聊 JS 输出为 [object object] 是怎么回事? 今天在学习ES6中的 Symbol 数据类型时,在写demo时控制台输出为 Symbol[object object] ,当时有点疑 ...
- 一道经典的Java面试题:equals ,== 和hashcode()的区别
一句话区别:==比较的是内存地址,equals比较的是值内容 结论: 从以下三点展开: 基本数据类型.字符串.对象 对于基本数据类型:只有==,没有equals. 对于字符串:==比较的是内存地址,e ...
- storm杂记+性能调优
1.默认情况下: 1个supervisor节点启动4个worker进程. 每一个topology默认占用一个worker进程. 每个worker会启动executor. 每个executor默认启动一 ...
- Android中getprop命令的使用
(1)getprop 在Android系统中,使用getprop命令可以从系统中读取一些设备信息,属性的文件例如: init.rc default.prop /system/build.prop 查询 ...
- 浅析PHP框架Laravel最新SQL注入漏洞
PHP知名开发框架Laravel,之前在官方博客通报了一个高危SQL注入漏洞,这里简单分析下. 首先,这个漏洞属于网站coding写法不规范,官方给了提示: 但官方还是做了修补,升级最新版本V5.8. ...
- [转帖]Linux chattr 命令详解
Linux chattr 命令详解 https://www.cnblogs.com/ftl1012/p/chattr.html 常见命令参数 1 2 3 4 5 6 7 8 9 10 11 12 A: ...
- 【转帖】Storm基本原理概念及基本使用
Storm基本原理概念及基本使用 https://www.cnblogs.com/swordfall/p/8821453.html 1. 背景介绍 1.1 离线计算是什么 离线计算:批量获取数据.批量 ...
- Nginx配置REWRITE隐藏index.php
server { listen 80; server_name localhost; root D:\workspace\PHP\Atromic; location / { index index.p ...
- C语言结构体的“继承”
这里说的继承有点像C++里的父类和子类,实际上是结构体类型的强制转换,最近看Linux内核源码时经常接触到这种方法,在这里就当作是一个简单的学习吧. 下面给出一个Demo,很简单,分别定义了一个fat ...
- idea(2018.3.5)破解
第一步:下载idea,https://www.jetbrains.com/idea/download/#section=windows,双击进行安装 第二步:下载破解的jar包:链接:https:// ...