15

テーブルに格納されたデータから 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 テンプレートでこの 2 つの間違った方法を試してみました。

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

これは単にすべてを最初の列に出力します。

これらの実験と他の多くの行き詰まりから、現在のデータ構造を考えると、テーブルを作成する簡単な方法はないと信じるようになりました。

これを考えると、2 つの質問があります
。1) 現在のデータ構造を使用してテーブルを作成するにはどうすればよいですか?
2) このユースケースのデータを構造化するための標準的または理想的な方法は何ですか?

前もって感謝します。

4

3 に答える 3

32

あなたが言ったように、あなたはあなたのデータ構造を変えるか、あなたのテンプレートコードを変えることができました。現在の構造を維持する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 %}
于 2012-11-09T21:00:15.620 に答える
5

Flask-Tableを使用することも、より複雑なものにはFlask-Adminを利用することもできます。

于 2014-09-26T00:41:10.170 に答える
2

ええ、あなたは本当にリストの辞書の代わりに辞書のリストを使いたいと思っています.Jinja2でよりうまく機能します.

于 2012-11-09T21:57:30.297 に答える