最近开发影院时遇到一个问题就是将查询到视频queryset分成两两一个小列表嵌套在里面
功能简单描述就是将[1,2,3,4,5,6]
变成[[1,2],[3,4],[5,6]]
,因为我模板渲染时需要这样的数据结构便于数据结构化呈现。
上面实现代码如下:
a=[1,2,3,4,5,6]
sep=2
print([ a[i:i+sep] for i in range(0,len(a),sep)]):
现在数据是有了,利用django的模板开始渲染,模板内容如下:
{% for video in videos %}{# 遍历大列表 #}
{% for item in video %} {# 遍历小列表 #}
{% endfor %}
{% endfor %}
{% if forloop.last %}pt-30{% endif %}
是由于这两个div一上一下,中间需要隔开空间。一开始还不知道怎么办,后面想起来还有一个forloop好工具,刚好小列表符合这种情况,完美解决我class动态添加的问题。
下面就介绍一下forloop的用法
方法名 | 解释 |
---|---|
forloop.counter | 从1开始叠加 |
forloop.counter0 | 从0开始叠加 |
forloop.first | 如果是第一次循环时为True |
forloop.last | 如果是最后一次循环时为True |
forloop.parentloop | 在嵌套的循环中, 引用父级循环的forloop对象 |
forloop.revcounter | 表示循环中剩余的元素数量。第一次循环时, 值是序列里面元素的个数。最后一次循环时的值为1 |
forloop.revcounter0 | 同上类似,不过索引是基于零的。第一次循环时值是序列中元素数量减去1。最后一次循环时的值为0 |
其实有时候django已经为我们提供了很多便捷的模板函数,只是我们不熟悉,导致重复造轮子