Django模板语言(三)

本文详细介绍了Django模板语言中的cycle、resetcycle、regroup及random等标签的使用方法,包括如何通过cycle实现循环样式变化,如何利用resetcycle重置循环状态,如何使用regroup进行数据分组,以及如何借助random标签随机选取列表元素。
摘要由CSDN通过智能技术生成

cycle

每次遇到这个标记时,都会产生一个参数。第一次遇到时产生第一个参数,第二次遇到时产生第二个参数,以此类推。一旦用尽所有参数,标签就会循环到第一个参数,并再次生成它。

def variable_dict(request):
    var_dict = {'var1': ['var0', 'var1', 'var2', 'var3', 'var5'], 'var2': [1, 2, 3, 4]}
    return render(request, 'variableCopy.html', {'var_dict': var_dict})
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试页面显示</title>
</head>
<body>
{% for k in var_dict.var1 %}
    <p class="{% cycle 'row1' 'row2' 'row3' %}">{{ k }}</p>
{% endfor %}
</body>
</html>

模板中也可以这样写 {% cycle 'row1' 'row2' 'row3' as varlues %}:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试页面显示</title>
</head>
<body>
{% for k in var_dict.var1 %}
    <p class="{% cycle 'row1' 'row2' 'row3' as varlues %}">{{ k }}</p>
{% endfor %}
{% for i in var_dict.var2 %}
    <p class="{% cycle varlues %}">{{ i }}</p>
{% endfor %}
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试页面显示</title>
</head>
<body>
    <p class="row1">var0</p>
    <p class="row2">var1</p>
    <p class="row3">var2</p>
    <p class="row1">var3</p>
    <p class="row2">var5</p>

    <p class="row3">1</p>
    <p class="row1">2</p>
    <p class="row2">3</p>
    <p class="row3">4</p>
</body>
</html>

cycle对应的是 resetcycle 标签,使用后标签在下次遇到时从第一个值重新开始。

resetcycle

重置之前的 cycle ,使其在下一次遇到时从第一个开始重新启动。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试页面显示</title>
</head>
<body>
{% for k in var_dict.var1 %}
    <p class="{% cycle 'row1' 'row2' 'row3' as varlues %}">{{ k }}</p>
{% endfor %}
{% for i in var_dict.var2 %}
    <p class="{% cycle varlues %}">{{ i }}</p>
    {% resetcycle %}
{% endfor %}
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试页面显示</title>
</head>
<body>
    <p class="row1">var0</p>
    <p class="row2">var1</p>
    <p class="row3">var2</p>
    <p class="row1">var3</p>
    <p class="row2">var5</p>

    <p class="row3">1</p>
    <p class="row1">2</p>
    <p class="row1">3</p>
    <p class="row1">4</p>
</body>
</html>

从上述代码可以看到,设置了resetcycle后,最后的三个class都是“ row1 

regroup

通过一个共同的属性将一个相似的对象列表重新分组。

def variable(request):
    get_data = [
    {'citry_name': 'Mumbai', 'population': '19,000,000', 'country': 'India'},
    {'citry_name': 'Calcutta', 'population': '15,000,000', 'country': 'India'},
    {'citry_name': 'New York', 'population': '20,000,000', 'country': 'USA'},
    {'citry_name': 'Chicago', 'population': '7,000,000', 'country': 'USA'},
    {'citry_name': 'Tokyo', 'population': '33,000,000', 'country': 'Japan'}]
    return render(request, 'variable.html', {'get_data': get_data})
  • 通过城市名称citry_name来进行分组
<div id="test">
        {% block test %}
            {% regroup get_data by citry_name as citry_list %}
            <ul>{{ citry_list }}
            {% for local_citry, country in citry_list %}
                <li>{{ local_citry }}
                <ul>
                    {% for country in country %}
                    <li>{{ country.country }}: {{ country.population }}</li>
                    {% endfor %}
                </ul>
                </li>
            {% endfor %}
        </ul>
        {% endblock %}
    </div>

  • 通过国家名称country来进行分组
 </div>
    <div id="test">
        {% block test %}
            {% regroup get_data by country as country_list %}
            <ul>{{ country_list }}
            {% for country, local_citry in country_list %}
                <li>{{ country }}
                <ul>
                    {% for citry in local_citry %}
                    <li>{{ citry.citry_name }}: {{ citry.population }}</li>
                    {% endfor %}
                </ul>
                </li>
            {% endfor %}
        </ul>
        {% endblock %}
    </div>

{% regroup %} 产生一个 组对象 的列表(在本例中为 country_list/citry_list)。组对象是 tuple() 的实例,有两个字段。

  • grouper:被分组的项目(例如,国家的“India” 和 “Japan”;城市的“Mumbai” 和 “Calcutta” 等字符串)。
  • list:本组所有项目的清单(例如,country='India' 的所有清单;citry_name='Calcutta'的所有清单)

random

从给定列表中随机返回一个项目。

注意:var_dict.var2是一个列表类型数据

{{ var_dict.var2|random }}

now

显示当前日期和/或时间,根据给定的字符串使用格式

{% now "Y M D H:i" %}

你也可以使用 {% now "Y M D" as var %} 的语法将输出(作为字符串)存储在一个变量中,再引用变量即可。

{% now "Y/M/D" as year_month_day %}
{{ year_month_day }}

django中的模板语言的内置标签还有很多,常用的也算是总结了一部分,如感觉到不够用的话可以去官网直接查阅,官网是可以把英文切换到中文的,还以比较可读的

Django官网内置标签参考页面

 

以上总结或许能帮助到你,或许帮助不到你,但还是希望能帮助到你,如有疑问、歧义,评论区留言会及时修正发布,谢谢!


未完,待续…

一直都在努力,希望您也是!

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值