首页 > 解决方案 > 从 Django 模板中的嵌套列表生成表

问题描述

我有一个这样的嵌套列表:

olddataList = [['Route To Path/file1.txt', 'Route To Path/file2.txt', 'Route To Path/file3.txt'], [['Routing', 'Error'], ['Routing', 'Error'], ['Routing', 'Error']], [[['file1.txt', 'Mapping error']], [['file2.txt', 'Mapping error']],[['file3.txt', 'Mapping error']]], [['Summary 1 CODE018', 1], ['Summary 1 CODE018', 2], ['Summary 1 CODE018', 3]]]


dataList = dataList = [['Route To Path/file1.txt', 'Route To Path/file2.txt', 'Route To Path/file3.txt'], [['Routing', 'Error'], ['Routing', 'Error'], ['Routing', 'Error']], [[['file1a.txt', 'Mapping error'],['file1b.txt', 'Mapping error']], [['file2a.txt', 'Mapping error'],['file2b.txt', 'Mapping error']],[['file3a.txt', 'Mapping error'],['file3b.txt', 'Mapping error']]], [['Summary 1 CODE018', 1], ['Summary 1 CODE018', 2], ['Summary 1 CODE018', 3]]]

我的意图是生成如下表:

Route To Path/file1.txt
Routing     Error
file1a.txt   Mapping error
file1b.txt   Mapping error
Summary 1 CODE018

Route To Path/file2.txt
Routing     Error
file2a.txt   Mapping error
file2b.txt   Mapping error
Summary 1 CODE018

Route To Path/file3.txt
Routing     Error
file3a.txt   Mapping error
file3b.txt   Mapping error
Summary 1 CODE018

但是,使用下面的代码,我得到的表格如下。最后的摘要行应该只取列表的第一个字段。

Route To Path/file1.txt
Route To Path/file2.txt
Route To Path/file3.txt
Routing     Error
Routing     Error
Routing     Error
file1.txt   Mapping error
file2.txt   Mapping error
file3.txt   Mapping error

我根据您的 NavaneethaKrishnan 先生的建议更新了我的代码,但我遇到了问题,因为我的 Django 环境无法识别括号中的表格。然而,我实现它的方式错误,虽然导致它也无法识别诸如'dataList.1.outer_counter'之类的参数来替换你的代码'dataList [1] [i]'。

{% with dataList|length as ctr %}
{{ ctr }} <br />
<h4>{{ dataList.0.ctr }}</h4><br /> <!-- not recognize dataList.0.ctr -->
{% endwith %}
<table id="myTable">
{% load summary %}
{% for c in dataList %} <!-- unable to apply range like  0|range:ctr here -->
{% with forloop.counter0 as outer_counter %}
    <tr>
        {% for r in dataList.1.outer_counter %} <!-- not recognize dataList.1.outer_counter -->
        <td>{{r}}</td>
        {% endfor %}
    </tr>
    <tr>
        {% for r in dataList.2.outer_counter.0 %}
        <td>{{r}}</td>
        {% endfor %}
    </tr>
    <tr>
        {% for r in dataList.3.outer_counter %}
        <td>{{r}}</td>
        {% endfor %}
    </tr>
</table>
{% endwith %}
{% endfor %}

先感谢您。非常感谢您的帮助。

[更新] 经过更多研究,我终于设法得到了解决方案。我把它贴在这里供任何其他可能需要它以供将来参考的人使用,以感谢帮助我的 NavaneethaKrishnan 先生。

{% for i in dataList.0 %}
{% with forloop.counter0 as outer_counter %}
{% if forloop.counter0 == outer_counter %}
<br />
<br />
<h4>{{ i }}</h4>
<table id="unitCheckDetailedTable">
    <tr>
        {% for i in dataList.1 %}
            {% if forloop.counter0 == outer_counter %}
                {% for j in i %}
                    <td>{{j}}</td>
                {% endfor %}
            {% endif %}
        {% endfor %}

    </tr>
        {% for i in dataList.2 %}
            {% if forloop.counter0 == outer_counter %}
                {% for j in i%}
    <tr>
                    {% for k in j%}
                        <td>{{k}}</td>
                    {% endfor %}
    </tr>
                {% endfor %}
            {% endif %}
        {% endfor %}
</table>
{% endif %}
{% endwith %}
{% endfor %}

标签: djangodjango-viewsdjango-templates

解决方案


您的列表不是直接排序的。我们必须在同一个表中添加每个子列表。我们可以做这样的事情。

{% for i in range(3) %}
<h4>{{dataList[0][i]}}</h4>
<table border>
    <tr>
        {% for r in dataList[1][i]%}
        <td>{{r}}</td>
        {% endfor %}
    </tr>
    <tr>
        {% for r in dataList[2][i][0]%}
        <td>{{r}}</td>
        {% endfor %}
    </tr>
    <tr>
        {% for r in dataList[3][i]%}
        <td>{{r}}</td>
        {% endfor %}
    </tr>
</table>
{% endfor %}

在此处输入图像描述

在这里,我通过了 3 个内部范围函数。这将生成 3 个表。但是如果你希望它是动态的,你可以改变这样的东西range(len(dataList[1])


推荐阅读