我使用 Flask 创建了一个 Web 应用程序。该应用程序将从我这里获取输入数据,然后它将迭代一堆 xml 文件并将所需的数据输出到屏幕上。
我想知道是否有一种方法可以在每次迭代后将结果填充/更新到屏幕上,而不是在最后全部显示?
我问这个问题是因为在我提交输入字段后,应用程序会运行很长时间来处理和显示数据。在此过程中,Web 应用程序是空白的、无响应的,并且在代码完全完成之前看不到任何进展。所以我想知道是否有办法在每次迭代后返回屏幕上的数据并使用每个数据更新页面。
在
Tkinter
中,我可以在循环中使用 win.update()
在每次迭代时重绘窗口。
但是我如何使用 Flask/Python 在网页上执行此操作?我需要在代码中插入 JavaScript 吗?我想要看到的是如何让我的应用程序执行得更快,以便更快地返回输出。
代码:
list_output = []
temp_storage = {}
def testFunction(COMP, source="."):
for pathway in glob.glob(os.pathway.join(source,"x*.xml")):
document = temp_storage.setdefault(pathway, ET.parse(pathway).getroot())
theLocationPoint = document.findall('.//*[@unit="' + Unit + '"]')
if theLocationPoint:
unit_unique_id = document.get("ID")
unit_label = document.tag
comp_name = document.get("Name")
testFunction(unit_unique_id, source=source)
list_output.append("Unit Unique ID: " + unit_unique_id + " " + "Unit of Page: " + unit_label + " " + "Unit of Part: " + comp_name)
return list_output
@app.route('/', methods=['GET', 'POST'])
def home():
if request.method == 'POST':
name = request.form.get('name')
return_string = testFunction(name, source=r"C:/.../.../")
return render_template('my-form.html', result=return_string)
return render_template('my-form.html', result='')
if __name__ == '__main__':
app.run()
HTML:
<body>
<ol>
<!-- For loop logic of jinja2 template -->
{%for i in result%}
<li>{{i}}</li>
{%endfor%}
</ol>
</body>
在 Flask 中,服务器通常仅在处理完整个请求后才向客户端发送响应。这意味着,如果您想在处理过程中更新客户端的内容,则需要使用 AJAX 等技术从服务器获取部分更新,而无需完全重新加载页面。