刷新时烧瓶将页面内容加倍

时间:2020-07-24 20:52:08

标签: python flask

我有一个简单的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>

需要做什么,以便刷新时它不会添加,而只会更新页面?

非常感谢, 彼得

2 个答案:

答案 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路由中移出,并且到全球范围。

如果您试图实现一种实时维护此列表的方法,那么全局变量就不可行了,这是另一个存储后端的工作。