从 Django 模板中的嵌套列表生成表
Posted
技术标签:
【中文标题】从 Django 模板中的嵌套列表生成表【英文标题】:To generate a table from a nested list in Django template 【发布时间】:2021-03-01 17:12:18 【问题描述】:我有一个这样的嵌套列表:
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 %
【问题讨论】:
【参考方案1】:您的列表不是直接排序的。我们必须在同一个表中添加每个子列表。我们可以这样做。
% 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])
【讨论】:
您好 NavaneethaKrishnan 先生,非常感谢您花时间在我的 2 个帖子上。我试图在我的环境中实现代码,但是在读取表格的括号时遇到问题(不知道为什么我的不能像你那样识别括号,我需要更改为点)。我在帖子中更新了我的代码,此外还更新了 dataList 以反映文件的数量是动态的。你能告诉我如何解决这个问题吗? 嗨 NavaneethaKrishnan,我可以知道如何动态读取诸如“dataList.1.outer_counter”之类的表(流程无法将 .outer_counter 识别为索引 0、1 等的替换) .我在搜索中找不到信息。 您好 NavaneethaKrishnan 先生,我现在设法得到解决方案。只想再次感谢您给予的大力支持。 是的。谢谢你:)以上是关于从 Django 模板中的嵌套列表生成表的主要内容,如果未能解决你的问题,请参考以下文章
使用 For 循环的 Django Python 模板嵌套列表