从Django模板中的嵌套列表生成表 [英] To generate a table from a nested list in Django template
问题描述
我有一个这样的嵌套列表:
I have a nested list as such:
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]]]
我的意图是生成一个如下表:
My intention is to generate a table like below:
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
但是,使用下面的代码,我得到的表如下.最后的摘要行应仅包含列表的第一个字段.
However with my code below, the table I get is as below. The final summary line should take only the first field of the list.
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]".
I updated my code follows on suggestion by you Mr NavaneethaKrishnan, but I'm facing issue cause my Django environment do not recognize the table in bracket. However the way I implementing it wrong though cause it also not recognize argument such as 'dataList.1.outer_counter' as to replace your code '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 %}
先谢谢您.非常感谢您的帮助.
Thank you in advance. Your helps is greatly appreciated.
[更新]经过更多研究,最终我设法找到了解决方案.我将其发布在这里,供将来可能需要此参考的任何人使用,以感谢对我有帮助的NavaneethaKrishnan先生.
[UPDATE] After do more research, finally I managed to get the solution. I post it here for anyone else who may need this for reference in future, as a token of appreciation for Mr NavaneethaKrishnan who had helped me.
{% 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 %}
推荐答案
您的列表不是直接排列的.我们必须在同一表中添加每个子列表.我们可以做这样的事情.
Your list is not in direct order. Each sublist we have to add in the same table. We can do something like this.
{% 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])
Here I passed 3 inside range function. This will generate 3 tables. But if you want this as dynamic, you can change something like this range(len(dataList[1])
这篇关于从Django模板中的嵌套列表生成表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!