как перенаправить URL в колбу в зависимости от переменной - PullRequest
0 голосов
/ 11 июня 2019

Я хочу перенаправить URL-адрес, когда переменная search_done имеет значение true, но до тех пор я хочу, чтобы загрузочный файл отображался, но мне не удается это сделать.

Я пытался делать все виды передачи переменных в html, но, поскольку переменная изменяется во время выполнения загрузочного файла, переменная не будет иметь значение true.

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'))

Я хочу, чтобы URL перенаправлялся на 'result', но он просто остается страницей загрузки

1 Ответ

0 голосов
/ 12 июня 2019

Невозможно сделать это так, как вы думаете.Короче говоря, самый простой способ добиться этого - добавить Javascript на страницу (ajax) и опросить ваш сервер, чтобы узнать, когда меняется переменная.Есть несколько вещей, которые следует учитывать:

  1. Как вы будете хранить переменную? Сессия - это опция для неважных, небольших значений.В противном случае DB может потребоваться для больших наборов данных или фоновый рабочий может потребоваться для длительных процессов.

  2. Получение значениявернуться в представление можно с помощью ajax (например, jquery $.get) и функции setTimeout с javascript.Это должно вызвать новый маршрут в вашем приложении, который извлекает значение из используемого вами метода хранения.

  3. Полностью асинхронный и просмотр Сокетов (например,) даст вам возможность создавать больше «живых» представлений, где представление вашего приложения может прослушивать события и обновлять без перезагрузки.Это, однако, меняет способ запуска вашего приложения.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...