[英]print hierarchy python dictionary in flask jinja
我在 python 中嵌套了字典:
result = {'Physics': {'Mechanics': {'Kinematics ': {}, 'Dynamics': {}}}, 'Math': {'Algebra': {'Polynomials': {'sum of polynomials': {}}}}}
我需要在 Flask/jinja 中打印這些數據。 我想得到一棵樹或一個嵌套列表。 結果應該是:
<ul class="list">
<li class="title">
<a href="/">"Physics"</a>
</li>
<ul class="list2">
<li class="title2">
<a href="/">"Mechanics"</a>
</li>
<ul class="list3">
<li class="title3">
<a href="/">"Kinematics "</a>
</li>
<li class="title3">
<a href="/">'Dynamics'</a>
</li>
</ul>
</ul>
</ul>
<ul class="list">
<li class="title">
<a href="/">'Math'</a>
</li>
<ul class="list2">
<li class="title2">
<a href="/">'Algebra'</a>
</li>
<ul class="list3">
<li class="title3">
<a href="/">'Polynomials'</a>
</li>
<ul class="list4">
<li class="title4">
<a href="/">'sum of polynomials'</a>
</li>
</ul>
</ul>
</ul>
</ul>
我應該如何解決我的問題?
您可以使用遞歸來創建字典的 HTML 標記,然后將結果字符串傳遞給您的模板:
def to_html(d, c = 1):
if not all(d.values()):
return f'<ul class="list{"" if c == 1 else c}">'+'\n'.join(f'<li class="title{"" if c == 1 else c}"><a href="/">{a}</a></li>{"" if not b else to_html(b, c+1)}' for a, b in d.items())+'</ul>'
return '\n'.join(f'<li class="title{"" if c == 1 else c}"><a href="/">{a}</a></li>' if not b else \
f"""
<ul class="list{"" if c == 1 else c}">
<li class="title{"" if c == 1 else c}"><a href="/">{a}</a></li>
{to_html(b, c+1)}
</ul>
"""
for a, b in d.items())
d = {'Physics': {'Mechanics': {'Kinematics ': {}, 'Dynamics': {}}}, 'Math': {'Algebra': {'Polynomials': {'sum of polynomials': {}}}}}
print(to_html(d))
輸出:
<ul class="list">
<li class="title">
<a href="/">
Physics
</a>
</li>
<ul class="list2">
<li class="title2">
<a href="/">
Mechanics
</a>
</li>
<ul class="list3">
<li class="title3">
<a href="/">
Kinematics
</a>
</li>
<li class="title3">
<a href="/">
Dynamics
</a>
</li>
</ul>
</ul>
</ul>
<ul class="list">
<li class="title">
<a href="/">
Math
</a>
</li>
<ul class="list2">
<li class="title2">
<a href="/">
Algebra
</a>
</li>
<ul class="list3">
<li class="title3">
<a href="/">
Polynomials
</a>
</li>
<ul class="list4">
<li class="title4">
<a href="/">
sum of polynomials
</a>
</li>
</ul>
</ul>
</ul>
</ul>
然后,在flask
:
@app.route('/hierarchy', methods=['GET'])
def hierarchy():
d = {'Physics': {'Mechanics': {'Kinematics ': {}, 'Dynamics': {}}}, 'Math': {'Algebra': {'Polynomials': {'sum of polynomials': {}}}}}
return flask.render_template('show_hierarchy.html', hierarchy=to_html(d))
show_hierarchy.html
:
<h1>Hierarchy</h1>
{{hierarchy}}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.