如果我有以下清单:
headers = ['Name', 'Age']
rows = [['Johnny', 30], ['Zack', 20]]
我可以通过Jinja2(https://jsfiddle.net/equbh9du/1/)轻松制作一张桌子:
<table class="table table-bordered table-hover">
<thead>
<tr>
{% for h in headers %}
<td>{{ h }}</td>
{% endfor %
</tr>
</thead>
<tbody>
{% for row in rows %}
<tr>
{% for item in row %}
<td>{{ item }}</td>
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>
我注意到将数据作为字典返回会更容易(也更有条理):
d = {'Name': ['Johnny', 'Zack'], 'Age': [30, 20]}
有没有一种简单的方法来构建我使用此dict构建的表。我想我需要在继续下一列之前完成每列的迭代(在上面的例子中,我在继续下一行之前完成每行的迭代)。
这是我到目前为止的代码,但我得到了一张混乱的表(https://jsfiddle.net/j164fqy9/1/):
<table class="table table-bordered table-hover">
<thead>
<tr>
{% for h in d %}
<td>{{ h }}</td>
{% endfor %
</tr>
</thead>
<tbody>
{% for h, col_values in d.items() %}
{% for item in col_values %}
<tr>
<td>{{ item }}</td>
</tr>
{% endfor %}
{% endfor %}
</tbody>
</table>
编辑:如果HTML标准阻止首先迭代列,那么我需要从headers
构建rows
和d
。低于最好的方法吗?
headers = [h for h in d]
rows = [[l[i] for h, l in d.items()] for i in range(len(d['Name']))]
答案 0 :(得分:1)
如果你总是在col_values
中拥有相同数量的项目,这应该可以正常工作:
{% for i in range(d['Name']|count) %}
<tr>
{% for k in d %}
<td>{{ d[k][i] }}</td>
{% endfor %}
</tr>
{% endfor %}