首页 > 解决方案 > 来自 python 字典的 HTML 表

问题描述

我正在尝试修改烧瓶应用程序中的部分代码。到目前为止,烧瓶应用程序做了什么:

它有大约 20 个链接,当有人单击链接时,它会返回 .json 对象(由 python 字典通过 jsonify 形成)。

我正在尝试做的事情:

以可能提取到 .csv 的表格格式返回相同的结果

我创建了以下函数:

def tab_out(output = {}):
    return render_template('output_tab.html',output=output)

将字典发送到一个 html 页面,其中包含:

{% block content %}
    <body>
        <pre>
            <table>
                <tr>
                    <th>Header 1</th>
                    <th>Header 2</th>
                    <th>Header 3</th>
                    <th>Header 4</th> 
                    <th>Header 5</th>
                    <th>Header 6</th>
                </tr>
                {% for key_1, value in output.items() %}
                    {% for key in value.keys() %}
                        <tr>
                            <td>
                                {{ key_1 | safe }}
                            </td>
                            
                            <td>
                                {{ key | safe }}
                            </td>
                            
                            <td>
                                {{ value[key]["Header_3"] }}
                            </td>
                            
                            <td>
                                {{ value[key]["Header_4"] }}
                            </td>
                            
                            <td>
                                {{ value[key]["Header_5"] }}
                            </td>
                            
                            <td>
                                {{ value[key]["Header_6"] }}
                            </td>
                        </tr>                        
                    {% endfor %}
                {% endfor %}
            </table>
        </pre>
    </body>
{% endblock %}

有什么问题:

我需要让它充满活力。

每个页面都有不同的标题。在每个页面中,生成的 .json 来自具有子字典的字典,并且每个字典中的键数可以不同。所以我不能事先指定标题。我希望它们动态创建。如果有 3 个子字典并将结果作为标题,其余作为值,则可能会展平字典(假设达到 2 级)。

我在 sa 中读过几个类似的问题,但没有一个对我有真正的帮助。有任何想法吗?

标签: pythonhtmlflaskjinja2

解决方案


下面的 jinja 代码将从任何 FLAT dict 生成 HTML 表。
标题是动态的。entry_list是一个字典列表。您的代码应该创建一个平面字典。

<table style="width:100%">
  <!-- table header -->
  {% if entry_list %}
  <tr>
     {% for key in entry_list [0] %}
     <th> {{ key }} </th>
     {% endfor %}
  </tr>
  {% endif %}

  <!-- table rows -->
  {% for dict_item in entry_list %}
  <tr>
     {% for value in dict_item.values() %}
     <td> {{ value }} </td>
     {% endfor %}
  </tr>
  {% endfor %}
</table>

推荐阅读