如何在Django中使用for循环创建表

时间:2019-03-22 11:50:55

标签: python django

我是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})

1 个答案:

答案 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 %}