首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在flask jinja中打印层次结构python字典

在flask jinja中打印层次结构python字典
EN

Stack Overflow用户
提问于 2021-10-25 11:23:04
回答 1查看 28关注 0票数 0

我在python中嵌套了字典:

代码语言:javascript
复制
result = {'Physics': {'Mechanics': {'Kinematics ': {}, 'Dynamics': {}}}, 'Math': {'Algebra': {'Polynomials': {'sum of polynomials': {}}}}}

我需要在flask/jinja中打印此数据。我想要一个树或者一个嵌套的列表。结果应该是:

代码语言:javascript
复制
<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>

我该如何解决我的问题呢?

EN

回答 1

Stack Overflow用户

发布于 2021-10-25 12:10:16

您可以使用递归创建字典的HTML标记,然后将生成的字符串传递给模板:

代码语言:javascript
复制
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))

输出:

代码语言:javascript
复制
<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

代码语言:javascript
复制
@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

代码语言:javascript
复制
<h1>Hierarchy</h1>
{{hierarchy}}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69707184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档