The purpose of django-plotly-dash is to enable Plotly Dash applications to be served up as part of a Django application, in order to provide these features:

  • Multiple dash applications can be used on a single page
  • Separate instances of a dash application can persist along with internal state
  • Leverage user management and access control and other parts of the Django infrastructure
  • Consolidate into a single server process to simplify scaling

There is nothing here that cannot be achieved through expanding the Flask app around Plotly Dash, or indeed by using an alternative web framework. The purpose of this project is to enable the above features, given that the choice to use Django has already been made.

The source code can be found in this github repository. This repository also includes a self-contained demo application, which can also be viewed online.


django_plotly_dash works by wrapping around the dash.Dash object. The http endpoints exposed by the Dash application are mapped to Django ones, and an application is embedded into a webpage through the use of a template tag. Multiple Dash applications can be used in a single page.

A subset of the internal state of a Dash application can be persisted as a standard Django model instance, and the application with this internal state is then available at its own URL. This can then be embedded into one or more pages in the same manner as described above for stateless applications.

Also, an enhanced version of the Dash callback is provided, giving the callback access to the current User, the current session, and also the model instance associated with the application’s internal state.

This package is compatible with version 2.0 onwards of Django. Use of the live updating feature requires the Django Channels extension; in turn this requires a suitable messaging backend such as Redis.