迭代时使用rowspan

时间:2017-02-02 01:29:51

标签: html-table jinja2

假设我有以下两个列表:

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/

我需要一种方法来打印名称单元格,仅用于第一次出现新名称。

1 个答案:

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