Как перейти на другую страницу после выполнения функции flask python

У меня есть функция getTableData() которая запускает другую функцию get_table() и на основе этой функции get_table() вызывается конечная функция, которая рендерит шаблон и также маршрутизирует на другую страницу.

Так что проблема в том, что она не маршрутизируется на другой url (/tabdata) из get_final() функции

Код колбы:

@app.route('/api/getTableData', methods=['POST'])
def getTableData():
    value = request.json['value']
    value=value[:8]
    url="https://some.com"+value
    df_time=get_table(url)
    return get_final(df_time)

def get_table(url):
    driver = webdriver.Chrome(options=options) 
    driver.get(url) 
    abv = pd.read_html(driver.find_element(By.ID,"frm_hist").get_attribute('outerHTML'))[0]
    df_time = pd.DataFrame(abv)  
    return df_time

@app.route("/tabdata")  
def get_final(df_time):
    return render_template("new.html",df_time = df_time)

Пояснение кода:

Я использую переменную value из value затем конкатенирую 2 строки для создания url и затем передаю url в другую функцию get_table() которая переходит на этот url и вебскрапирует таблицу и конвертирует ее в python dataframe.

Затем, используя полученный python dataframe get_final() вызывается для рендеринга шаблона в html файл, а также для маршрутизации к url /tabdata. Все работает хорошо, но страница не маршрутизируется к этому url

В getTableData(), изменение

return get_final(df_time)

to

return redirect(url_for("get_final", df_time=df_time))

В get_final(), изменение

@app.route("/tabdata")  
def get_final(df_time):
    return render_template("new.html",df_time = df_time)

to

@app.route("/tabdata/<df_time>")
def get_final(df_time):
    return render_template("new.html", df_time=df_time)

Хотя ваш перенаправленный URL будет выглядеть примерно так; "http://localhost/tabdata/16606505". Если это нежелательно, вы всегда можете перенаправить GET-запрос с параметрами запроса (который будет выглядеть так: "http://localhost/tabdata&data=16606505") или перенаправить POST-запрос, который не покажет параметр df_time в истории браузера

Вы должны вернуть перенаправление:

from flask import redirect

@app.route("/tabdata/<df_time>")
def get_final(df_time):
    return redirect("http://www.example.com", code=200)

Используйте redirect и используйте его вместе с url_for на случай, если в будущем вы решите изменить свои маршруты. Вам также необходимо изменить функцию просмотра get_final

from flask import redirect, url_for


@app.route('/api/getTableData', methods=['POST'])
def getTableData():
    value = request.json['value']
    value = value[:8]
    url = "https://some.com"+value
    df_time = get_table(url)
    return redirect(url_for('get_final', df_time=df_time))

def get_table(url):
    driver = webdriver.Chrome(options=options) 
    driver.get(url) 
    abv = pd.read_html(driver.find_element(By.ID,"frm_hist").get_attribute('outerHTML'))[0]
    df_time = pd.DataFrame(abv)  
    return df_time

@app.route("/tabdata/<df_time>") # notice change here!
def get_final(df_time):
    return render_template("new.html", df_time=df_time)

Вернуться на верх