Динамически назначьте функцию da sh .layout с помощью flask app.route - PullRequest
1 голос
/ 26 апреля 2020

Я пытаюсь динамически изменить назначение функции dash_app.layout в экземпляре приложения flask.

Приложение Flask создается методом фабрики и, что наиболее важно, состоит из

  1. app = Add_Dash(app) -> здесь приложение Da sh инициализируется с помощью pre-fix / da sh -app
  2. 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. Окончательная настройка будет выглядеть следующим образом:

  1. Пользователь нажимает кнопку навигации
  2. Асинхронный JS XHR-запрос отправляется на сервер flask и принимается в route.py module
  3. В модуле rout.py назначается dash_app.layout = newFunction (изменено с dash_app.layout = chStatistics
  4. . При обратном вызове вызова JS XHR выполняется $.renderer = new DashRenderer();, что делает Приложение da sh *
  5. Приложение Da sh теперь использует новую функцию для получения графиков

Я думал, что смогу создать функцию маршрутизатора, которая изначально назначается при Приложение da sh запускается и затем выполняет либо функцию chFunction, либо функцию newFunction на основе переменной сеанса, установленной модулем router.py, однако я не уверен, является ли это наиболее оптимальным способом сделать это.

*) в целях полноты я должен упомянуть, что это упрощено. На самом деле происходит дополнительная манипуляция с DOM (например, del of # response-entry-point), так что da sh повторно выполняет рендеринг

...