假设我有以下两个列表:
for word in words.anagram(letters):
if len(word.split()) <= int(argv[2]):
print word
也就是说,Josh最喜欢的颜色是蓝色和红色,Brad是紫色和金色等。
我正在通过烧瓶将这些数据传递给jinja2模板,我希望将它全部放在一张桌子上。我希望表格看起来像这样:https://jsfiddle.net/46qqfef5/
正如您所看到的,我使用names = ['Josh', 'Brad', 'Jordan']
favorite_colors = [['blue', 'red'], ['purple', 'gold', 'yellow'], ['green', 'pink']]
属性来分组名称和颜色。但是,当我尝试使用下面的jinja2代码迭代数据时,rowspan
标记出现在每一行中(我需要它只在第一次出现新名称时出现)。
的Jinja2:
<td rowspan="2">
如果我从上面的jinja2代码中删除<div class="table-responsive">
<table class="table table-bordered table-hover">
<thead>
<tr>
<th>Name</th>
<th>Favorite Color</th>
</tr>
</thead>
<tbody>
{% for name_index in range(names | count) %}
{% for color_index in range(favorite_colors[name_index] | count %}
<tr>
<td rowspan="{{ favorite_colors[name_index] | count }}">{{ names[name_index] }}</td>
<td>{{ favorite_colors[name_index][color_index] }}</td>
</tr>
{% endfor %}
{% endfor %}
</tbody>
</table>
<div
,我会得到下表,但这对我来说非常糟糕:https://jsfiddle.net/46qqfef5/3/
我需要一种方法来打印名称单元格,仅用于第一次出现新名称。
答案 0 :(得分:3)
您可以使用special loop variables检查当前循环是否优先。在您的情况下,可以使用loop.first
:
<table>
<thead>
<tr>
<th>Name</th>
<th>Favorite Color</th>
</tr>
</thead>
<tbody>
{% for name_index in range(names | count) %}
{% for color in favorite_colors[name_index] %}
<tr>
{% if loop.first %}
<td rowspan="{{ favorite_colors[name_index] | count }}">
{{ names[name_index] }}
</td>
{% endif %}
<td>{{ color }}</td>
</tr>
{% endfor %}
{% endfor %}
</tbody>
</table>