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

acp*_*eon 11 html python flask

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

x = {'date':[u'2012-06-28', u'2012-06-29', u'2012-06-30'], 'users': [405, 368, 119]}
Run Code Online (Sandbox Code Playgroud)

我的目标是为任意列表长度创建一个具有以下结构的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> 
Run Code Online (Sandbox Code Playgroud)

我在Flask模板中尝试过两种不正确的方法:

<tbody>
  {% for line in x %}
    <tr>
      <td>{{ x.date|tojson|safe }}</td>
      <td>{{ x.users }}</td>
     </tr>
   {% endfor %}
</tbody>
Run Code Online (Sandbox Code Playgroud)

这会将整个列表打印到每列中.

和:

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

{% for users in x.users %}
  <tr><td>{{ users }}</td></tr>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

这只是将所有内容打印到第一列.

这些实验和许多其他死角让我相信,根据我目前的数据结构,没有简单的方法来构建表格.

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

提前致谢.

Nat*_*usa 25

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

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

或者你可以在python中重构你的数据:

x = zip(x['date'], x['users'])
Run Code Online (Sandbox Code Playgroud)

然后使用此模板:

{% for row in x %}
    <tr>
      <td>{{ row[0]|tojson|safe }}</td>
      <td>{{ row[1] }}</td>
    </tr>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

您还可以构建数据,以便模板不依赖于单元格的顺序:

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

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

{% for row in x %}
    <tr>
      <td>{{ row['date']|tojson|safe }}</td>
      <td>{{ row['user'] }}</td>
    </tr>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

  • 是的.Flask使用Jinja2作为模板,因此您可以使用http://jinja.pocoo.org/docs/templates/#builtin-filters中的任何内容. (3认同)

小智 5

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