Я пытаюсь динамически изменить назначение функции dash_app.layout в экземпляре приложения flask.
Приложение Flask создается методом фабрики и, что наиболее важно, состоит из
app = Add_Dash(app)
-> здесь приложение Da sh инициализируется с помощью pre-fix / da sh -app app.register_blueprint
(rout.main_bp) -> где маршруты добавляются
в классе Add_Da sh, функции назначается функция dash_app.layout, которая возвращает / инструктирует визуализацию графиков html / DOM во время выполнения (назначение выполняется в инициализация / запуск сервера)
dash_app.layout = chStatistics
Приложение da sh выполняет эту функцию (chStatistics) и повторно обрабатывает DOM каждый раз, когда пользователь вызывает приложение da sh.
В 'index. html' (который отображается шаблоном flask) я построил навигацию, которая управляет вызовом JS, отображающим графики da sh ($.renderer = new DashRenderer();
). Это выполняет функцию, назначенную для dash_app.layout
. Пока все это работает нормально.
Теперь я бы хотел переназначить модуль dash_app.layout = newFunction
в routes.py
. Окончательная настройка будет выглядеть следующим образом:
- Пользователь нажимает кнопку навигации
- Асинхронный JS XHR-запрос отправляется на сервер flask и принимается в route.py module
- В модуле rout.py назначается
dash_app.layout = newFunction
(изменено с dash_app.layout = chStatistics
- . При обратном вызове вызова JS XHR выполняется
$.renderer = new DashRenderer();
, что делает Приложение da sh * - Приложение Da sh теперь использует новую функцию для получения графиков
Я думал, что смогу создать функцию маршрутизатора, которая изначально назначается при Приложение da sh запускается и затем выполняет либо функцию chFunction, либо функцию newFunction на основе переменной сеанса, установленной модулем router.py, однако я не уверен, является ли это наиболее оптимальным способом сделать это.
*) в целях полноты я должен упомянуть, что это упрощено. На самом деле происходит дополнительная манипуляция с DOM (например, del of # response-entry-point), так что da sh повторно выполняет рендеринг