首先組織數據:
a = {'.': {'walk.py': None, 'what.html': None, 'misc': {}, 'orders': {'order1.html': None, 'more': {'stuff.html': None}}}}
from collections import defaultdict
def f(data, path):
for k,v in data.iteritems():
if v is None:
yield path,k
else:
yield path,k+"/"
for k in f(v,path+k+"/"):
yield k
def process_data():
collect = defaultdict(list)
for p in f(a,""):
if p[0]:
collect[p[0][:-1]].append(p[1])
return collect
現在,如果你運行:
data = process_data()
for k in data.keys():
print k,data[k]
你得到:
./orders ['order1.html', 'more/']
./orders/more ['stuff.html']
. ['walk.py', 'what.html', 'misc/', 'orders/']
這就是所有你需要的渲染。模板應該是這樣的:
{% for k in sitemap.keys()|sort -%}
{{ k }}:<br/>
{% for v in sitemap[k] %}
{{ v }}
{%- endfor %}
<br/>
{%- endfor %}
,並呼籲渲染:
@app.route("/")
def hello():
return render_template('temp.html',sitemap=process_data())
這在我的測試將呈現爲:
.:<br/>
walk.py
what.html
misc/
orders/
<br/>./orders:<br/>
order1.html
more/
<br/>./orders/more:<br/>
stuff.html
<br/>
這將在瓶中正確的渲染工作? – removekebab
用燒瓶工作得很好。謝啦。 – removekebab
如果它有效,你應該接受其他人學習的答案 – codegeek