django模板标签{% for %}的使用(含forloop用法)

 {%  %}虽然这个是写在html中,但是这里边写的是服务端代码

django模板标签中,{% for %} 标签用于迭代序列中的各个元素。

与 Python 的 for 语句类似,语法是 for X in Y ,其中 Y 是要迭代的序列, X 是单次循环中使用的变量。每次迭代时,模板系统会渲染 {% for %}{% endfor %} 之间的内容。

1. 可以使用下述模板显示 athlete_list 变量中的运动员:

<ul>
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% endfor %}
</ul>
 

2. 加入 reversed 标签,反向迭代列表

{% for athlete in athlete_list reversed %}

{% endfor %}

3. 对二元组解包

{% for x, y in points %}
<p>There is a point at {{ x }},{{ y }}</p>
{% endfor %}

4. 字典解包

{% for key, value in data.items %}
{{ key }}: {{ value }}
{% endfor %}

5. 判断列表是否为空,为空就显示特定内容

第一种使用{% if %}标签

{% if athlete_list %}
{% for athlete in athlete_list %}
<p>{{ athlete.name }}</p>
{% endfor %}
{% else %}
<p>There are no athletes. Only computer programmers.</p>
{% endif %}

第二种使用{% empty %}标签

{% for athlete in athlete_list %}
<p>{{ athlete.name }}</p>
{% empty %}
<p>There are no athletes. Only computer programmers.</p>
{% endfor %}

5. {% for %}标签内部模板变量forloop

{% for %}循环内部,可以访问一个名为forloop的模板变量。这个变量有若干属性,通过它们可以获知循环进程的一些信息。

5.1 forloop.counter

forloop.counter 的值是一个整数,表示循环的次数。这个属性的值从 1 开始,因此第一次循环时,forloop.counter 等于 1 。

{% for item in todo_list %}
<p>{{ forloop.counter }}: {{ item }}</p>
{% endfor %}
 

5.2 forloop.counter0

forloop.counter0forloop.counter 类似,不过是从零开始的。第一次循环时,其值为 0 。

5.3 forloop.revcounter

forloop.revcounter的值是一个整数,表示循环中剩余的元素数量。第一次循环时, forloop.revcounter 的值是序列中要遍历的元素总数。最后一次循环时, forloop.revcounter的值为 1 。

5.4 forloop.revcounter0

forloop.revcounter0forloop.revcounter类似,不过索引是基于零的。第一次循环时, forloop.revcounter0的值是序列中元素数量减去一。最后一次循环时, forloop.revcounter0 的值为 0 。

5.5 forloop.first

forloop.first 是个布尔值,第一次循环时为 True 。需要特殊处理第一个元素时很方便:

{% for object in objects %}
{% if forloop.first %}
<li class="first">
{% else %}
<li>
{% endif %}
{{ object }}
</li>
{% endfor %}
 

5.6 forloop.last

forloop.last是个布尔值,最后一次循环时为True 。经常用它在一组链接之间放置管道符号:

{% for link in links %}
{{ link }}{% if not forloop.last %} | {% endif %}
{% endfor %}

上述模板代码的输出可能是:

Link1 | Link2 | Link3 | Link4

此外,还经常用它在一组单词之间放置逗号:

<p>Favorite places:</p>
{% for p in places %}
{{ p }}{% if not forloop.last %}, {% endif %}
{% endfor %}

5.7 forloop.parentloop

在嵌套的循环中, forloop.parentloop引用父级循环的 forloop 对象。下面举个例子:

{% for country in countries %}
<table>
{% for city in country.city_list %}
<tr>
<td>Country #{{ forloop.parentloop.counter }}</td>
<td>City #{{ forloop.counter }}</td>
<td>{{ city }}</td>
</tr>
{% endfor %}
</table>
{% endfor %}
 

小贴士

forloop 变量只在循环内部可用。模板解析器遇到 {% endfor %} 时, forloop 随之消失。

上下文和 forloop 变量


{% for %} 块中,现有变量会让位,防止覆盖 forloop 变量。Django 把移动的上下文放到


forloop.parentloop 中。通常,你无须担心,但是如果有名为 forloop 的模板变量(不建议这


么做),在 {% for %} 块中会重命名为 forloop.parentloop

转:django模板标签{% for %}的使用(含forloop用法)的更多相关文章

  1. Django 模板标签[转]

    Django 模板标签if/else 标签 基本语法格式如下: {% if condition %}     ... display{% endif %} 或者: {% if condition1 % ...

  2. 解决AngularJS和Django模板标签冲突问题

    原地址 Django和AngularJS在模板中使用同样的符号来引用变量,例如 {{variable_name}}. 有两种解决办法,各有利弊.一个修改AngularJS模板语法,另一个使用Djang ...

  3. Django 学习第四天——Django 模板标签

    一.模板标签: 作用:标签在渲染的过程中提供任意的逻辑:例如 if for...in... 等 标签语法:由 {% %} 来定义的:例如:{% tag %}xxx{% endtag %} 常用标签: ...

  4. python的Web框架,Django模板标签及模板的继承

    模板标签 在传递数据的时候,会有大量的数据展示在浏览器上,而数据会是动态变化的,在html的编写中,数据也是需要动态的,而不能是写死的,如果动态展示呢. 给定的例子数据 views传递数据给html ...

  5. Django模板标签

    一.模板标签 1.模板标签是在模板中运用python语言的实现,如for循环,if语句 2.模板标签的运用 2.1在teacher模板下创建students_list模板, 在teacher视图中国创 ...

  6. django模板语言循环字典,及forloop

    views: from django.shortcuts import render,redirect from django.shortcuts import HttpResponse # Crea ...

  7. Django 学习笔记(五)模板标签

    关于Django模板标签官方网址https://docs.djangoproject.com/en/1.11/ref/templates/builtins/ 1.IF标签 Hello World/vi ...

  8. Django之博客系统:自定义模板标签

    Django提供了很多内置的模板标签比如{% if %}或者{% block %}Django也允许你创建自己的模板标签(template tags)来执行自定义的动作.当你需要在你的模板中添加功能而 ...

  9. Django——4 模板标签 模板的继承与引用

    Django 模板标签 常用标签 模板的继承与引用 模板标签 标签在渲染的过程中提供任意的逻辑 标签语法: 由%}和 {% 来定义的,例如:{%tag%} {%endtag%} 这个定义是刻意模糊的. ...

随机推荐

  1. synchronized 同步代码块,售票问题

    package cn.ljs.FristSync; public class SalerDemo extends Thread { static int tickets = 1000; String ...

  2. POJ 1655 - Balancing Act - [DFS][树的重心]

    链接:http://poj.org/problem?id=1655 Time Limit: 1000MS Memory Limit: 65536K Description Consider a tre ...

  3. static的含义

    static的含义:(1)设置变量的存储域,函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍持上次的值:(2)限制变量的作用域,在模块 ...

  4. [skill][c] *(char**)

    /* scmp: string compare of *p1 and *p2 */ int scmp(const void *p1, const void *p2) { char *v1, *v2; ...

  5. hadoop 学习笔记2

    ============Hive vs Hadoop============== Hive是建立在Hadoop之上为了减少MapReduce jobs编写工作的批处理系统,HBase是为了支持弥补Ha ...

  6. 命令行颜色换算器(基于python)

    import sys print(hex(int(sys.argv[1])<<16|int(sys.argv[2])<<8|int(sys.argv[3]))) 就两行代码 在 ...

  7. SQL SERVER BCP的用法

    转自:https://www.cnblogs.com/fishparadise/p/4809014.html 前言 SQL SERVER提供多种不同的数据导出导入的工具,也可以编写SQL脚本,使用存储 ...

  8. 数据库每分钟运行监控SQL

    每1分钟运行一次,记录正在运行的SQL,监控数据 放在ReportServer库的t_WhoIsActive表中,保留最近30天的数据! USE [ReportServer] GO /****** O ...

  9. Linux软件包的安装(rpm+yum)

    概述: 1.rpm软件包管理命令软件包的获取a.光盘镜像中有很多软件包可以使用:先挂载光盘,再查看软件包b.从软件的官网获取 .rpm 安装rpm包 ipm -ivh 软件包名称删除rpm包 ipm ...

  10. 在WCF服务端的web.config中增加如下设置,具体的错误会记录在.svclog文件中

    <system.diagnostics> <sources> <source name="System.ServiceModel" switchVal ...