【问题标题】:Flask and HTML, from python dictionary to HTML table iterativelyFlask 和 HTML,从 python 字典到 HTML 表的迭代
【发布时间】:2015-05-08 09:53:43
【问题描述】:

我有一个格式为 python 的字典

data = {
    'category1': {
        'titles': ['t1', 't2', 't3'],
        'dates': ['d1', 'd2', 'd3']
    },
    'category2': {
        'titles': ['t4', 't5', 't6'],
        'dates': ['d4', 'd5', 'd6']
    }
}

我想创建一个看起来像这样的 html 表:

category1        category2
t1               t4
d1               d4
--------------------------
t2               t5
d2               d5
--------------------------
t3               t6
d3               d6
--------------------------

我正在使用烧瓶,我的烧瓶/python 代码是:

from flask import Flask, render_template
import pickle

app = Flask(__name__)

@app.route('/')
def hello_world():
    data=pickle.load(open('results.p','rb'))

    return render_template('index.html', x=data)

if __name__ == "__main__":
    app.run()

我的 HTML 模板是:

<!DOCTYPE html>
<html lang="en">
<head>
    <title>My Webpage</title>

</head>

<body>

<table>
{% for r,s in x.iteritems() %}
    <tr>
      <td>{{ r['titles'] }}{{r['dates']}}</td>
      <td>{{ s['titles'] }} {{s['dates']}}</td>
    </tr>
{% endfor %}
</table>
</body>
</html>

但是,当我运行此程序时,我遇到了内部服务器错误。

我也累了data.iteritems() 没有任何快乐。

我也在这里接受了答案:Python dictionary in to html table,但我得到了同样的错误。

【问题讨论】:

    标签: python flask


    【解决方案1】:
    newdata = zip(
        zip(*(x['titles'] for x in data.values())),
        zip(*(x['dates'] for x in data.values())))
    
    print(list(data.keys()))
    for group in newdata:
        for row in group:
            print(row)
        print('-----')
    

    给你这个输出:

    ['category1', 'category2']
    ('t1', 't4')
    ('d1', 'd4')
    -----
    ('t2', 't5')
    ('d2', 'd5')
    -----
    ('t3', 't6')
    ('d3', 'd6')
    -----
    

    如您所见,现在newdata 中的项目已正确配对。所以现在您可以更好地迭代它并生成表格输出。

    模板代码可能如下所示:

    <table>
      {% for group in x %}
         {% for row in group %}
         <tr>
           <td>{{ row[0] }}</td>
           <td>{{ row[1] }}</td>
        </tr>
        {% endfor %}
      {% endfor %}
    </table>
    

    【讨论】:

    • 谢谢,所以要通过烧瓶将其转换为 html,我可以将 html 文件中的 print(row) 替换为 `return render_template('index.html',x=row)&lt;td&gt;{{ r['titles'] }}{{r['dates']}}&lt;/td&gt; 并使用 &lt;td&gt;{{x}}&lt;/td&gt; 吗?
    • 不,您仍然需要传递整个newdata 对象并更改模板中的循环。我在答案中添加了一个示例。
    • 谢谢,我的代码似乎还有其他问题——因为我遇到了同样的错误。我需要继续挖掘。
    • 啊哈,您的内部循环中缺少for!现在完全可以用了,谢谢
    • 哦,你是对的!修复了这个问题,很高兴它现在可以工作了:)
    【解决方案2】:

    看看,希望有用:D

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <title>My Webpage</title>
    </head>
    <body>
        <table>
            {% for r in x.values() %}
                <tr>
                  <td>{{ r['titles'] }}{{ r['dates'] }}</td>
                </tr>
            {% endfor %}
        </table>
    </body>
    </html>
    

    【讨论】:

      猜你喜欢
      • 2013-01-17
      • 2015-05-31
      • 2014-05-17
      • 2015-05-08
      • 2018-10-04
      • 2014-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多