如何在django模板中将记录解析为html表
假设我有以下数据:(通过注释queryset) 我想在html表格上显示为交叉表:如何在django模板中将记录解析为html表,django,templates,html-table,crosstab,Django,Templates,Html Table,Crosstab,假设我有以下数据:(通过注释queryset) 我想在html表格上显示为交叉表: A B C John 200 100 Tom 300 100 到目前为止,我只能通过如下方式修改数据结构来实现这一点: [{'name':'John', 'games':['', 200, 100]}, {'name':'Tom', 'games':[300,'',100]}] 有没有更好的方法可以让我不用太多修改就可以使用原始数据。通常在Django中
A B C
John 200 100
Tom 300 100
到目前为止,我只能通过如下方式修改数据结构来实现这一点:
[{'name':'John', 'games':['', 200, 100]},
{'name':'Tom', 'games':[300,'',100]}]
有没有更好的方法可以让我不用太多修改就可以使用原始数据。通常在Django中,理念是首先在视图中重塑数据,使模板尽可能简单(而不是在模板中使用复杂的重塑代码) 这就是说,在您的情况下,您可以通过以下方式获得更大的成功:
将
['A','B','C']
作为列传递到模板上下文中
{% regroup records by name as grouped_records %}
<table>
<thead>
<tr>
<th></th>
{% for column in columns %}
<th>{{ column }}</th>
{% endfor %}
</tr>
</thead>
<tbody>
{% for group in grouped_records %}
<tr>
<td>{{ group.grouper }}</td>
{% for column in columns %}
<td>
{% for record in group.list %}
{% if record.game == column %}{{ record.score }}{% endif %}
{% endfor %}
</td>
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>
{%按名称将记录重新分组为分组的\u记录%}
{columns%%中的列的百分比}
{{column}}
{%endfor%}
{分组的_记录%中的组的百分比}
{{group.grouper}}
{columns%%中的列的百分比}
{group.list%中记录的%s}
{%if-record.game==列%}{{record.score}}{%endif%}
{%endfor%}
{%endfor%}
{%endfor%}
我的最终决定是重新构造数据
首先用默认值填充所有单元格:
records = []
for name in names:
record = {}
record['name'] = name
# add other key if need
record['data'] = [''] * len(games)
records.append(record.copy())
for data in datalist:
name = names.index(data['name'])
game = games.index(data['game'])
records[name][game] = data['score']
然后传递到模板:
...
{% for record in records %}
<tr>
<td>{{ record.name }}</td>
{% for data in record.date %}
<td>{{ data }}</td>
{% endfor %}
</tr>
{% endfor %}
...
。。。
{记录%中的记录的%s}
{{record.name}
{record.date%中的数据为%0}
{{data}}
{%endfor%}
{%endfor%}
...
在使用“索引”之前,我的重构代码相当长
...
{% for record in records %}
<tr>
<td>{{ record.name }}</td>
{% for data in record.date %}
<td>{{ data }}</td>
{% endfor %}
</tr>
{% endfor %}
...