将 Flask JSON 响应作为 HTML 表获取?

Car*_*arl 6 python csv json html-table flask

我想知道是否有办法将 Flask 应用程序的响应作为由 JSON 响应键值对填充的 HTML 表返回,而不仅仅是在 HTML 页面上包含整个 JSON 字符串?

以下是我拥有的代码:

from flask import Flask
import json, pandas as pd

app = Flask(__name__)

@app.route("/GetData")
def GetData():
    df = pd.read_csv("DemoData.csv")
    temp = df.to_dict('records')
    data = [dict(i) for i in temp]
    return json.dumps(data, indent=4)


if __name__ == "__main__":
    app.run(host='127.0.0.1', port=8000)
Run Code Online (Sandbox Code Playgroud)

上面的代码给出了以下响应:(URL:“ http://127.0.0.1:8000/GetData ”)

电流输出

现在我想要的是在输入上述 URL 时将响应转换为表格,有点像 CSV 文件。

这是我的 CSV 文件示例:

员工姓名、城市、国家、分配的项目
Carl Elias,美国帕萨迪纳,光学字符识别
Amanda Jean Spears,美国丹佛,Linux Kali Security Mods
John Reese,雅典,希腊,惯性导航系统
Leslie James,英国赫特福德郡,中继传输优化模组
Patrick Sullivan,伦敦,英国,欺诈检查系统
Julia Reginald Roberts,巴西圣保罗,用户认证系统
Michael Bucannan,美国旧金山,分析自动化工具
Jeanine Fitzgerald,安大略省,加拿大,CopyChecker
Patricia Sullly,上海,中国,自动铣刀

cod*_*der 8

你应该像 Alex Hall 所说的那样为它写一个模板。如果您遍历列名,它将不会被硬编码。首先,您应该导入 render_template。

from flask import Flask, render_template
Run Code Online (Sandbox Code Playgroud)

然后,您需要更改请求处理程序。这允许通过注入两个变量,记录和列名来呈现模板“record.html”。

@app.route("/GetData")
def GetData():
    df = pd.read_csv("DemoData.csv")
    temp = df.to_dict('records')
    columnNames = df.columns.values
    return render_template('record.html', records=temp, colnames=columnNames)
Run Code Online (Sandbox Code Playgroud)

检查此渲染模板指南。您需要创建一个新文件夹“templates/”,您可以在下面找到“templates/record.html”:

<table border="1">
    <thead>
        <tr>
            {% for col in colnames %}
            <th>{{ col }}</th>
            {% endfor %}
        </tr>
    </thead>
    <tbody>
        {% for record in records %}
        <tr>
            {% for col in colnames %}
            <td>{{ record[col] }}</td>
            {% endfor %}
        </tr>
        {% endfor %}
    </tbody>
</table>
Run Code Online (Sandbox Code Playgroud)

要动态执行此操作,首先您应该遍历列名。正如 Alex Hall 所说,dict 不是有序的,因此在迭代记录时,您还应该迭代列名,这样您就可以按正确的顺序编写它们。