[英]how to redirect url in flask depending on a variable
我想在变量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'))
我希望网址重定向到“结果”,但它只是作为加载页面保留
以你的思维方式做这件事是不可能的。 简而言之,最简单的方法是向页面添加一些Javascript(ajax),并轮询您的服务器以查找变量何时更改。 有几点需要考虑:
你将如何存储变量? 会话是非重要的小值的选项。 否则,对于大型数据集可能需要DB ,或者对于长时间运行的进程可能需要后台工作程序。
将值返回到视图中可以使用ajax(例如jquery $.get
)和带有javascript的setTimeout
函数来完成。 这应该在您的应用中调用一个新路由,从您正在使用的存储方法中检索值。
完全异步并查看套接字 (例如)将使您能够创建更多“实时”视图,您的应用程序视图可以监听事件并在不重新加载的情况下进行更新。 但这确实会改变您的应用的运行方式。
希望这可以帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.