簡體   English   中英

在flask jinja中打印層次結構python字典

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM