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. [No000013D].Net 项目代码风格参考

    1. C#代码风格要求 1.1 注释 类型.属性.事件.方法.方法参数,根据需要添加注释. 如果类型.属性.事件.方法.方法参数的名称已经是自解释了,不需要加注释:否则需要添加注释. 当添加注释时,添 ...

  2. [No0000E0]批量打开当前路径下的文件

    for /r %i in ( *) do start %i

  3. 制作dlib(面部识别检测)静态库

    参考或引用网址: 快速精准的人头检测,代码已开源http://url.cn/5e3qQPN http://www.jianshu.com/p/701e8dea887e 官网文档 GitHub地址 1. ...

  4. Vue SSR 配合Java的Javascript引擎j2v8实现服务端渲染4支持构建bundle

    安装 webpack-node-externals yarn add -D webpack-node-externals

  5. 关于ionic如何到最新版本

    首先删除 我叫他它叫做依赖node_modules 文件夹然后修改 修改依赖版本package.json 各个文件的版本号接着下载 下载最新的依赖 会根据package.json 各个文件的版本号添加 ...

  6. 如何辨别高潜牛人的六个方法,据说源自500强HR

    如果你是一名领导,当老板派下来任务让你招人的时候,你有考虑过怎么招到合适的人么?今天,架构师米洛特意分享一篇优秀的网络文章,据说来自500强的HR,希望对你招人有所帮助. 如何识人是HR及管理者重要的 ...

  7. [knowledge][模式匹配] 字符匹配/模式匹配 正则表达式 自动机

    字符串 T = abcabaabcabac,字符串 P = abaa,判断P是否是T的子串,就是字符串匹配问题了,T 叫做文本(Text) ,P 叫做模式(Pattern),所以正确描述是,找出所有在 ...

  8. [knowledge] big data things

    http://hadoop.apache.org/ https://spark.apache.org/ https://nifi.apache.org/ https://www.cloudera.co ...

  9. LeetCode 953 Verifying an Alien Dictionary 解题报告

    题目要求 In an alien language, surprisingly they also use english lowercase letters, but possibly in a d ...

  10. mysql拼接sql的语法concat()用法

    之前写了oracle拼接sql是用“||”,那么mysql也有自己的拼接的语法concat() concat()的基本语法是如下: 括号内的拼接内容语法和python中拼接显示字符串和变量.常量时一样 ...