当变量search_done为true时,我想重定向URL,但在此之前,我希望显示加载文件,但我无法这样做。
我尝试过将各种变量传递给html,但由于该变量在加载文件运行期间发生变化,因此该变量将不是真实的。
单击搜索按钮时,URL更改为加载文件。
@app.route("/", methods=['GET','POST'])
def index():
global search_done
global songs
if request.method == 'POST':
search_request = request.form.getlist('search[]')
songs=[]
data=search_api(search_request)
search_done=False
if data!=None:
for hit in data:
songs.append(Song(hit['result']['full_title'],hit['result']['primary_artist']['name'],hit['result']['url'],hit['result']['song_art_image_thumbnail_url']))
for i in songs:
print(i)
search_done=True
return render_template('layout.html')
@app.route("/result")
def result():
global songs
return render_template("result.html",songs=songs)
@app.route("/loading")
def load():
global search_done
while not search_done:
return render_template("loading.html")
return redirect(url_for('result'))
我希望该网址重定向到“结果”,但它仍保持为加载页面
答案 0 :(得分:0)
不可能按照您的想法进行操作。简而言之,最简单的方法是在页面(ajax)中添加一些Javascript,并轮询服务器以查找变量何时更改。有几件事情要考虑:
如何存储变量? Session是不重要的小值的选项。否则,对于大型数据集可能需要DB,或者对于长时间运行的进程可能需要background worker。
可以使用ajax(例如jquery $.get
)和带有JavaScript的setTimeout
函数来将值返回到视图中。这应该在您的应用程序中调用一条新路线,该路线将从您使用的存储方法中检索值。
完全同步并查看Sockets(例如)将使您能够创建更多“实时”视图,您的应用程序视图可以监听事件并进行更新而无需重新加载。但这确实会改变您的应用程序的运行方式。
希望这会有所帮助!