我需要在带有变量列的Django模板中创建一个表,我一直在尝试使用以下代码:
假设我有以下标题:
headers = ['date', 'a', 'b', 'c']
body = [{'date': '2015-10-16', 'a':1, 'b':2, 'c':3},
{'date': '2015-10-17', 'a':4, 'b':5, 'c':6},
....]
正如您所见,标题对应于正文值的键。 所以我一直在尝试使用 for 嵌套循环,但是,我失败了。
<table >
<thead>
<tr>
{% for th in headers %}
<th>{{th}}</th>
{% endfor %}
</tr>
</thead>
<tbody>
{% for bd in body %}
<tr>
{% for h in header %}
{% with h as key %}
<td>{{bd.key}}</td>
{% endwith %}
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>
{{bd.key}}
未显示。有解决方案吗或者我需要修改我的桌子。
答案 0 :(得分:1)
编写自定义模板过滤器:
from django.template.defaulttags import register
@register.filter
def get_dict_item(target_dict, key):
return target_dict.get(key, '')
用法:
<table>
<thead>
<tr>
{% for th in headers %}
<th>{{ th }}</th>
{% endfor %}
</tr>
</thead>
<tbody>
{% for bd in body %}
<tr>
{% for h in header %}
{% with h as key %}
<td>{{ bd|get_dict_item:key }}</td>
{% endwith %}
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>