Django for标签详解

Django for标签详解

1. for标签的使用

for 标签用于对可迭代对象进行遍历,包括列表、元组等,它与 Python 中的 for 语法是类似的。for 标签 使用时也需要和 endfor 标签配合使用,当然它也有不同之处,那就是它多了一个可选的 empty 标签,比如用它来显示当列表不存在或者列表中元素为空的时候要显示的内容,它的使用格式如下:

{% for 变量 in 可迭代对象 %}
    ... 循环语句
{% empty %}
    ... 可迭代对象无数据时填充的语句
{% endfor %}

我们通过一个具体的实例来看一下它的用法,在 views.py 中添加如下代码:

from django.template import Template,Context
def test_for(request):
      #调用template()方法生成模板
      t1=Template("""
                    {% for item in list %}
                        <li>{{ item }}</li>
                    {% empty %}
                        <h1>如果找不到你想要,可以去csdn网(网址:http://csdn.net/)</h1>
                    {% endfor %}
                              """)
      #调用 Context()方法
      c1= Context({'list':['Python','Java','C','Javascript','C++']})
      html=t1.render(c1)
      return HttpResponse(html)

并配置路由映射关系,如下所示:

path('test_for/',views.test_for)

访问 127.0.0.1:8000/test_for 得到如下页面:

for标签的使用

图1:for 标签的使用

提示:与 Python 中的 for 循环不同的是,for 标签只能一次性地遍历完列表中的元素,不能中断(break),也不能跳过(continue)。

2. for标签嵌套使用

for 标签同样可以嵌套使用,示例代码如下所示:

def test01_for(request):
    #使用嵌套for标签依次遍历列表取值
     website=Template("""
     {% for course in list01 %}
     <div>
        {% for coursename in course %}
        <p><b>{{ coursename }}</b></p>
        {% endfor %}
     </div>
     {% endfor %}
     """)
     webname=Context({'list01':[['Django','Flask','Tornado']]})
     html=website.render(webname)
     return HttpResponse(html)

然后为其配置路由映射关系,最后访问 127.0.0.1/test01_for 获得相应页面如下所示:

for循环嵌套使用

图2:for 循环嵌套使用

3. forloop变量详解

在 for 标签还提供了内置变量 forloop ,我们可以访问这个变量的属性从而获取 for 循环迭代过程中的一些信息,比如 forloop.first,它的返回值是一个布尔值,当 for 循环迭代第一个元素的时候返回 True, 若有其余元素则返回的是 False。forloop 的属性主要有以下几个:

forloop变量属性

变量描述
forloop.counter用来计数,查看当前迭代第几个元素(从1开始索引)
forloop.counter0用来计数,查看当前迭代第几个元素(从0开始索引)
forloop.revcounter表示当前循环中剩余的未被迭代的元素数量(从1开始索引)
forloop.revcounter0表示当前循环中剩余的未被迭代的元素数量(从0开始索引)
forloop.first如果当前迭代的是第一个元素,则为True
forloop.last如果当前迭代的是最后一个元素,则为True
forloop.parentloop在嵌套循环中,用来引用外层循环的 forloop

实例说明如下所示:

def test_forloop(request):
     a=Template("""
     {% for item in lists %}
     <div>
        <p><b>{{ forloop.counter }}:{{ item }}</b></p>
     </div>
     {% endfor %}
     """)
     b=Context({'lists':['Django官网','Pytho官网']})
     html=a.render(b)

     return HttpResponse(html) 

提示:forloop 变量只能在 for 与 endfor 之间使用,它的 first 和 last 属性,可以通过 if
标签对当前迭代元素做逻辑判断,而像 counter 属性,常用于调试程序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

睿科知识云

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值