[英]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.