如何构造数据以在Flask中轻松构建HTML表

发布于 2021-01-29 15:06:21

我正在尝试从存储在表中的数据创建HTML表。我的数据是从表中读取的,并转换为列表的字典,例如:

x = {'date':[u'2012-06-28', u'2012-06-29', u'2012-06-30'], 'users': [405, 368, 119]}

我的目标是为任意列表长度创建具有以下结构的HTML表:

<table>
  <thead>
    <th>Date</th>
    <th>Users</th>
  </thead>

  <tbody>      
    <tr>
      <td>2012-06-28</td>
      <td>405</td>
    </tr>
    <tr>
      <td>2012-06-29</td>
      <td>368</td>
    </tr>
    <tr>
      <td>2012-06-30</td>
      <td>119</td>
    </tr>
  </tbody>
</table>

我尝试在Flask模板中执行以下两种不正确的方法:

<tbody>
  {% for line in x %}
    <tr>
      <td>{{ x.date|tojson|safe }}</td>
      <td>{{ x.users }}</td>
     </tr>
   {% endfor %}
</tbody>

它将整个列表打印到每一列中。

和:

{% for date in x.date %}
  <tr><td>{{ date|tojson|safe }}</td></tr>
{% endfor %}

{% for users in x.users %}
  <tr><td>{{ users }}</td></tr>
{% endfor %}

它将所有内容简单地打印到第一列中。

这些实验和许多其他死胡同让我相信,没有什么简单的方法可以构建表,就像我想要的当前数据结构一样。

鉴于此,我有两个问题:
1)我将如何使用当前数据结构构建表?
2)此用例的数据结构的标准或理想方式是什么?

提前致谢。

关注者
0
被浏览
52
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    如您所说,您可以更改数据结构,也可以更改模板代码。这是保持当前结构的一种方法:

    {% for row_index in range(x['date']|count) %}
        <tr>
          <td>{{ x[row_index]['date']|tojson|safe }}</td>
          <td>{{ x[row_index]['users'] }}</td>
        </tr>
    {% endfor %}
    

    或者您可以在python中重组数据:

    x = zip(x['date'], x['users'])
    

    然后使用此模板:

    {% for row in x %}
        <tr>
          <td>{{ row[0]|tojson|safe }}</td>
          <td>{{ row[1] }}</td>
        </tr>
    {% endfor %}
    

    您还可以对数据进行结构化,以使模板不依赖于单元格的顺序:

    from itertools import izip
    x = [dict(date=d, user=u) for d, u in izip(x['date'], x['users'])]
    

    然后,您可以像这样访问数据:

    {% for row in x %}
        <tr>
          <td>{{ row['date']|tojson|safe }}</td>
          <td>{{ row['user'] }}</td>
        </tr>
    {% endfor %}
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看