我有一个简单的Flask脚本,该脚本加载一个Pandas文件(在另一个.py文件中创建)并显示此文件。 它显示了我想要的所有内容……但是,只要刷新页面,就会添加相同的内容!
这是烧瓶的东西:
from flask import Flask,render_template
import Python_script
import pandas as pd
app = Flask(__name__)
@app.route("/")
def home():
a = Python_script.summary()
df=pd.DataFrame(a)
return render_template('simple.html', tables=[df.to_html(classes='overview')], header='true')
if __name__ == "__main__":
app.run(debug=True)
Python_script.summary返回一个列表
这是html代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
</style>
</head>
<body>
{% for table in tables %}
{{ table|safe }}
{% endfor %}
</body>
</html>
需要做什么,以便刷新时它不会添加,而只会更新页面?
非常感谢, 彼得
答案 0 :(得分:1)
如果我从您的评论中正确理解,您的Python_script
如下:
e = []
def summary():
a = 2
e.append(a)
return e
如果是这样,那么您有问题。 e
是一个全局变量,因此每次调用summary()方法时,它将向其中添加更多值。 Flask代码看起来不错。您需要更改summary
的逻辑才能不扩展数据。
答案 1 :(得分:1)
根据您的评论,如果这是Python_script.py
的内容:
e=[]
def summary():
a = 2
e.append(a)
return e
然后将调试行添加到Flask路由:
import Python_script
@app.route("/")
def home():
a = Python_script.summary()
print(Python_script.e)
# ...
您将看到Python_script.e
是全局变量,并且在后续请求中将2
附加到该列表。
一种快速的解决方法可能是通过移动分配它的行来使a
在Flask应用程序中全局化。
import Python_script
a = Python_script.summary()
@app.route("/")
def home():
print(Python_script.e)
# ...
现在,后续请求不会将2
附加到列表中。这样,a
被分配给服务器进程启动时,而不是处理请求时,因为该行已从Flask路由中移出,并且到全球范围。
如果您试图实现一种实时维护此列表的方法,那么全局变量就不可行了,这是另一个存储后端的工作。