• 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>
    

    显示效果

  • 相关阅读:
    PlayerPrefs存储Vector3等结构数据
    Kafka集群部署及測试
    火云开发课堂
    Thinking in Java:容器深入研究
    求int型数据在内存中存储时1的个数
    JAVA 几种多线程的简单实例 Thread Runnable
    Android利用Intent与其它应用交互
    kernel
    Azure DocumentDB 正式发布
    在公有云平台体验开源方案的自动部署
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/11801061.html
Copyright © 2020-2023  润新知