我是Django的初学者,我正在尝试使用名为law.html
的html模板创建自定义表。在law.html
中,我有以下代码。
<table class="table table-striped">
<thead>
<tr>
<th>Solicitor_Names</th>
<th>Offices</th>
<th>Addresses</th>
<th>Primary_Role</th>
<th>Secondary_Role</th>
<th>Other_Role</th>
<th>Other_Role_1</th>
<th>Other_Role_2</th>
<th>Other_Role_3</th>
<th>Other_Role_4</th>
</tr>
</thead>
<tbody>
{% for name in all_data.Solicitor_Name %}
<tr>
<td>{{ name }}</td>
<tr>
{% endfor %}
{% for office in all_data.Office %}
<tr>
<td>{{ office }}</td>
<tr>
{% endfor %}
</tbody>
输出会完美地生成所需的表标题。同样,Solicitor_Name
列中填充了所需的数据。但是,我尝试将Office
数据放在下一列中失败。取而代之的是,数据继续填充Solicitor_Name
列下的单元格。如何格式化代码,以便获得所需的输出,像这样?
Solicitor_Name Offices Address
John Orange LLP 123 Main St
Bill Apple LLP 124 Bone St
这是我的views.py
def law_view(request, *args, **kwargs):
all_data = combine_data()
return render(request, "law.html", {'all_data': all_data})
答案 0 :(得分:0)
您必须逐行构造表,而不是逐列构造表。这也意味着all_data
应该是行的列表,而不是列的字典(现在看来)。因此,您要像这样构造all_data
:
[
{'name': 'Mr. Shaw', 'office': 'Orange LLP', 'address': '123 Main Str'},
{'name': 'Bill', 'office': 'Apple LLP', 'address': '124 Bone St'},
... ]
而不是这样:
{
'name': ['Mr. Shaw', 'Bill', ...],
'office': ['Orange LLP', 'Apple LLP', ...],
'address': ['123 Bone St', ...]
}
如果您确定列表的长度都相同(看起来像这样),则可以使用以下方法将第二种格式转换为第一种格式:
all_data = [{'name': all_data['name'][i], 'office': all_data['office'][i], ...} for i in range(len(all_data['name']))]
或者DataFrame
上肯定有一个函数可以做到这一点(transpose()
?)
然后在模板中只有一个循环:
{% for solicitor in all_data %}
<tr><td>{{ solicitor.name }}</td><td>{{ solicitor.office }}</td>...</tr>
{% endfor %}