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中的模板语言的内置标签还有很多,常用的也算是总结了一部分,如感觉到不够用的话可以去官网直接查阅,官网是可以把英文切换到中文的,还以比较可读的
以上总结或许能帮助到你,或许帮助不到你,但还是希望能帮助到你,如有疑问、歧义,评论区留言会及时修正发布,谢谢!
未完,待续…
一直都在努力,希望您也是!