我将以下列表通过烧瓶传递给Jinja2模板:
yrs = [2016, 2017]
months = [['June'], ['January', 'February']]
names = [[['John', 'Mike']], [['Sara'], ['Steph', 'James']]]
我试图制作一个如下所示的表格:https://jsfiddle.net/46qqfef5/4/
以下是我为实现这一目标而制定的不成功的Jinja2代码:
<div class="table-responsive">
<table class="table table-bordered">
<thead>
<tr>
<th>Year</th>
<th>Month</th>
<th>Name</th>
</tr>
</thead>
<tbody>
{% for yr_index in range(yrs | count) %}
{% for month_index in range(months[yr_index] | count) %}
{% for name_index in range(names[yr_index][month_index] | count) %}
<tr>
{% if loop.first %}
{% if loop.first %}
<td rowspan="{{ names[yr_index] | count }}">{{ yrs[yrs_index] }}</td>
{% endif %}
<td rowspan="{{ names[yr_index][month_index] | count }}">{{ months[yr_index][month_index] }}</td>
{% endif %}
<td>{{ names[yr_index][month_index][name_index] }}</td>
</tr>
{% endfor %}
{% endfor %}
</tbody>
</table>
<div>
所以我基本上只是尝试将这些列表解压缩到一个有组织的表格中,但我在rowspan
属性上遇到了很多麻烦。任何提示都会非常感激,即使它与更改python列表的结构有关。
答案 0 :(得分:1)
首先尝试这个(没有测试)。你似乎误用了loop.first
(你有嵌套循环,实际上你不能依赖loop.first
)。并且您还需要在检索计数之前展平names[yr_index]
列表。
请仔细阅读:http://jinja.pocoo.org/docs/dev/tricks/#accessing-the-parent-loop。
<div class="table-responsive">
<table class="table table-bordered">
<thead>
<tr>
<th>Year</th>
<th>Month</th>
<th>Name</th>
</tr>
</thead>
<tbody>
{% for yr in yrs %}
{% set yr_loop = loop %}
{% for month in months[loop.index0] %}
{% set month_loop = loop %}
{% for name in names[yr_loop.index0][loop.index0] %}
<tr>
{% if loop.first %}
{% if month_loop.first %}
<td rowspan="{{ names[yr_loop.index0]|sum(start=[])|count }}">{{ yr }}</td>
{% endif %}
<td rowspan="{{ loop.length }}">{{ month }}</td>
{% endif %}
<td>{{ name }}</td>
</tr>
{% endfor %}
{% endfor %}
</tbody>
</table>
<div>