我不知道如何表达我的需求。我只显示代码。
data_lis = [1,2,3,4,5,6,7,8,9]
如何将该列表分成N
个部分,每个部分3个元素?
我这样做是为了渲染
<div class="card-group d-block d-md-flex u-card--gutters-2-md">
<div class="card border-0 rounded shadow-sm mb-3 transition-3d-hover">element</div>
<div class="card border-0 rounded shadow-sm mb-3 transition-3d-hover">element</div>
<div class="card border-0 rounded shadow-sm mb-3 transition-3d-hover">element</div>
</div>
我需要像上述样式一样渲染数据,但是如何动态更改渲染方式?
a = [
[3,2,3],
[3,4,2],
[3,2]
]
我只是将其手动分成N
个部分,每个部分包含3个元素!
答案 0 :(得分:2)
如果我理解正确,则需要模板语法。
尝试:
{% for i in a %}
<div class="card-group d-block d-md-flex u-card--gutters-2-md">
{% for k in i %}
<div class="card border-0 rounded shadow-sm mb-3 transition-3d-hover">{{ k }}</div>
{% endfor %}
</div>
{% endfor %}
使用将列表划分为N个块。
data_lis = [1,2,3,4,5,6,7,8,9]
N = 3
a = [data_lis[i:i+N] for i in range(0, len(data_lis), N)]
print(a)
输出:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
答案 1 :(得分:1)
您可以使用Rakesh所说的语法
data_list = [data_list[i:min(i+3, len(data_list)] for i in xrange(0, len(data_list_, 3)]
您还可以像这样更改模板中的语法
{% for i in a %}
{% if forloop.counter0|divisibleby:3 %}
<div class="card-group d-block d-md-flex u-card--gutters-2-md">
{% endif %}
<div class="card border-0 rounded shadow-sm mb-3 transition-3d-hover">
{{ k }}
</div>
{% if forloop.counter0|add:2|divisibleby:3 %}
</div>
{% endif %}
{% endfor %}
{% ifequal a|length|divisibleby:3 False %}
</div>
{% endifnotequal %}
在这里,您不想将内容拆分为列表列表。