【问题标题】:How to display csv data in html as URL using flask?如何使用烧瓶将 html 中的 csv 数据显示为 URL?
【发布时间】:2020-08-23 13:13:17
【问题描述】:

使用烧瓶应用程序,我设法在 HTML 表格中显示 my.csv 文件。现在我正在尝试将 URL 添加到 HTML 表中显示的每个 userId(请参阅输出),例如: https://myURL.com/1 https://myURL.com/2等等……

假设一旦我点击 userID 列中的 userId URL,它将带我进入一个 HTML 页面,其中包含该 ID 的更多详细信息。

app.py

from flask import Flask,render_template, request
import pandas as pd
import numpy as np
app = Flask(__name__)

@app.route('/example')
def dataframe():
    df = pd.read_csv("my.csv")
    return render_template("example.html",  data=df.head(5).to_html())

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

example.html

<!DOCTYPE html>
<html>
<head>
    <title>CSV Data</title>
</head>
<body>
<h1>My stats</h1> 

{{data | safe}}

</body>
</html>

输出:http://127.0.0.1:5000/example

提前谢谢你!

【问题讨论】:

    标签: html python-3.x flask


    【解决方案1】:

    虽然您可以从 Pandas 渲染 HTML,然后在 Flask 中渲染该 HTML,但问题是这种方法会阻止对 HTML 进行额外的编辑。为了开始这项任务,我在 Pandas 中创建了一些合成数据

    import pandas
    df = pandas.DataFrame([{"userID": 4, "customers": 23},
                           {"userID": 3, "customers": 33},
                           {"userID": 1, "customers": 42},
                           {"userID": 5, "customers": 13},])
    print(df.to_html())
    

    要包含 URL,一种简单的方法是在生成 HTML 之前尝试将链接作为字符串嵌入到 Pandas 数据框中。问题是 Pandas 转换字符串:

    import pandas
    df = pandas.DataFrame([{"userID": "<a href='helo'>4</a>", "customers": 23},
                           {"userID": 3, "customers": 33},
                           {"userID": 1, "customers": 42},
                           {"userID": 5, "customers": 13},])
    print(df.to_html())
    

    产生一个包含字符串&amp;lt;a href='helo'&amp;gt;4&amp;lt;/a&amp;gt;的单元格

    要将超链接保留为 HTML,请告诉 Pandas 不要转义特殊字符。

    import pandas
    df = pandas.DataFrame([{"userID": "<a href='helo'>4</a>", "customers": 23},
                           {"userID": 3, "customers": 33},
                           {"userID": 1, "customers": 42},
                           {"userID": 5, "customers": 13},])
    print(df.to_html(escape=False))
    

    下一个任务是将链接注入数据框:

    list_of_rows = []
    for index, row in df.iterrows():
        new_row = {'customers': dict(row)['customers']} # keep the old data
        uid = str(dict(row)['userID'])
        new_row['userID'] = "<a href='http://url.com/"+uid+"'>"+uid+"</a>"
        list_of_rows.append(new_row)
    df_with_links = pandas.DataFrame(list_of_rows)
    

    将这些技术整合到您的代码中,

    @app.route('/example')
    def dataframe():
        df = pd.read_csv("my.csv")
        list_of_rows = []
        for index, row in df.iterrows():
            new_row = {'customers': dict(row)['customers']} # keep the old data
            uid = str(dict(row)['userID'])
            new_row['userID'] = "<a href='http://url.com/"+uid+"'>"+uid+"</a>"
            list_of_rows.append(new_row)
        df_with_links = pandas.DataFrame(list_of_rows)
    
        return render_template("example.html",  data=df_with_links.to_html(escape=False))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-09
      • 2023-04-04
      • 1970-01-01
      • 2021-07-31
      • 2022-12-08
      • 2019-01-11
      相关资源
      最近更新 更多