【问题标题】:How to structure data to easily build HTML tables in Flask如何在 Flask 中构建数据以轻松构建 HTML 表格
【发布时间】:2012-10-30 05:36:51
【问题描述】:

我正在尝试从存储在表中的数据创建 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) 为这个用例构造数据的标准或理想方式是什么?

提前致谢。

【问题讨论】:

    标签: python html flask


    【解决方案1】:

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

    {% 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 %}
    

    【讨论】:

    • 这太好了,谢谢。在我接受之前,你能给我一些关于这些管道命令的文档吗?没想到还有更多。
    • 是的。 Flask 使用 Jinja2 作为其模板,因此您可以使用 jinja.pocoo.org/docs/templates/#builtin-filters 中的任何内容。
    【解决方案2】:

    您可以使用Flask-Table 或更复杂的东西,甚至可以使用Flask-Admin

    【讨论】:

      【解决方案3】:

      是的,你真的想使用字典列表而不是列表字典,这在 Jinja2 中效果更好

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-09-25
        • 1970-01-01
        • 2016-06-04
        • 2014-04-01
        • 2018-05-08
        • 2021-09-20
        • 1970-01-01
        相关资源
        最近更新 更多