Как перейти на другую страницу после выполнения функции 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)