如何在Django模板中每个循环渲染3个元素?

时间:2018-08-14 05:24:01

标签: python django python-3.x

我不知道如何表达我的需求。我只显示代码。

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个元素!

2 个答案:

答案 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 %}

在这里,您不想将内容拆分为列表列表。