gpt4 book ai didi

python - 在mako模板中迭代嵌套的dict

转载 作者:行者123 更新时间:2023-12-01 19:32:53 26 4
gpt4 key购买 nike

我有以下意见:

{"name1":{"text":"my text 1", "status":"my status"}, "name2":{"text":"my text 2", "status":"my status"}}

使用Mako模板,我想创建一个html表。我尝试了以下方法:

Python片段:
test = {"name1":{"text":"my text 1", "status":"my status"}, "name2":{"text":"my text 2", "status":"my status"}}
mytemplate = Template(filename='template/index.mako')
return mytemplate.render(data=test)

Mako片段:
% for key, val in data.iteritems():
<tr>
<td>${loop.index + 1}</td>
<td>${key}</td>
% for tkey, tval in val.iteritems():
<td>${tkey}</td>
<td>${tval}</td>
% endfor
</tr>
% endfor

以上代码片段引发错误(“str”对象没有属性“iteritems”)。

迭代嵌套字典的正确方法是什么?

谢谢

最佳答案

很难做到这一点。最近,我试图做一些非常相似,发现这个帖子,很伤心地看到,它没有任何答案。

您要求使用“适当”的方式,我认为对项目进行迭代将是最Python化的方式。但我也无法使它起作用。我能够使一个递归解析器正常工作(额外的好处是它将处理n级嵌套)。

我得到这个工作:

from mako.template import Template

template = '''
${handleLevel(pages)}
<%def name="handleLevel(level, depth=0)">
% if isinstance(level, dict):
% for item in level:
% if isinstance(level[item], dict):
<!-- print this item for this level -->
${handleLevel(level[item], depth+1)}
<!-- end this level (close div or anything that should contain next level -->
% else:
<!-- handle bottom level (linke, or div, etc.) -->
${item}
<!-- close any elements for bottom level not already closed -->
% endif
% endfor
% endif
</%def>
'''

nested = {
'A': {'B': 'C'},
'D': 'E',
}
page = Template(template).render(pages=nested)
print(page)

如果您知道只有一个嵌套级别,则可以执行以下for循环:
from __future__ import print_function
from mako.template import Template

template = '''
% for key in data:
<tr>
<td>${loop.index + 1}</td>
<td>${key}</td>
% for secondKey in data[key]:
<td>${secondKey}</td>
<td>${data[key][secondKey]}</td>
% endfor
</tr>
% endfor
'''

test = {"name1":{"text":"my text 1", "status":"my status"}, "name2":{"text":"my text 2", "status":"my status"}}
page = Template(template).render(data=test)
print(page)

(在Python3和2中测试)

尽管现在我已经对此进行了更多介绍,但是您的代码在Python 2.7.15和mako版本1.0.7中对我来说工作正常。 。 。

关于python - 在mako模板中迭代嵌套的dict,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39125927/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com