【问题标题】:Dynamically changing HTML whilst running python script in Flask在 Flask 中运行 python 脚本时动态更改 HTML
【发布时间】:2020-08-02 13:59:58
【问题描述】:

我想为我的 ML 项目创建一个 webapp。我在烧瓶中有这段代码:

from flask import Flask, render_template, request, url_for, flash, redirect

app = Flask(__name__)
app.config["DEBUG"] = True

@app.route('/')
def index():
    
    return(
        render_template('index.html')


    )

问题是索引函数返回的是render_template。相反,我想从我的 ML 项目中运行一些 python 代码,同时在代码运行时更新 index.html 中的 HTML。

例如,假设你有一些 python 代码:

print('Reading text from csv file...')
dataframe = pd.read_csv('helo.csv')
print('Done reading...')

如何让这段代码在烧瓶中运行,而不是打印;我更改了

的 innerHTML

我的主 html 文件中的标签?

【问题讨论】:

  • 详细了解 Flask 中的模板 - 您可以发送具有不同值的参数,然后您可以获得具有不同值的 HTML。 - render_template('index.html', data=dataframe) 但它需要重新加载整页。如果你想在不重新加载的情况下更新,那么你必须学习 JavaScript 和 AJAX (XHR) 或使用 JavaScript 的模块,如 jQUery,它具有函数 $.ajax()
  • 如果你想在网页上使用 DataFrame,那么可以为此使用特殊模块 - bokehdashstreamlit。其中一些基于Flask
  • 顺便说一句:你甚至可以使用df.to_html() 来渲染<table>,你可以在HTML中显示render_template('index.html', table=df.to_html())
  • 谢谢!我最初使用的是 streamlit,但问题是每次用户与 UI 交互时它都会重新运行整个脚本。我的程序很长,由许多顺序进程组成,我想在 UI 上向用户显示所有这些进程,并且他们可以与之交互。这就是为什么我认为 Flask 效果更好,正如你所说,我可能需要使用 AJAX。本质上,我想要做的只是运行我通常的 python 程序,但我希望它显示在网页/应用程序上,而不是出现在 python 控制台中的输入(例如输入('输入集群数')等)跨度>
  • 然后当用户输入到 webapp 时,python 代码会继续运行,直到下一个输入/绘图。然后,webapp 上的 html 必须更改以请求此输入。用户输入,然后 python 代码继续运行。重复直到程序结束

标签: javascript python html flask web-applications


【解决方案1】:

您可以在 javascript 中使用 XMLHttpRequest。因此浏览器将加载 index.html 而不是在后台加载。它可以每隔几秒左右向服务器询问一些数据(为此使用 setTimeOut)。一旦服务器确认它已完成运行 ML 代码。浏览器会自动做出反应。

https://www.w3schools.com/xml/xml_http.asp

https://www.w3schools.com/jsref/met_win_settimeout.asp

【讨论】:

    猜你喜欢
    • 2017-04-15
    • 1970-01-01
    • 2016-09-27
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    • 2018-12-15
    • 1970-01-01
    • 2020-09-17
    相关资源
    最近更新 更多