Skip to main content

Django use of plotly dash apps through template tags

Project description

django-plotly-dash

PyPI version Downloads Develop Branch Build Status Coverage Status Documentation Status

Expose plotly dash apps as Django tags. Multiple Dash apps can then be embedded into a single web page, persist and share internal state, and also have access to the current user and session variables.

See the source for this project here: https://github.com/GibbsConsulting/django-plotly-dash

This README file provides a short guide to installing and using the package, and also outlines how to run the demonstration application.

More detailed information can be found in the online documentation at https://readthedocs.org/projects/django-plotly-dash

An online version of the demo can be found at https://djangoplotlydash.com

Installation

First, install the package. This will also install plotly and some dash packages if they are not already present.

pip install django_plotly_dash

Then, add django_plotly_dash to INSTALLED_APPS in your Django settings.py file

INSTALLED_APPS = [
    ...
    'django_plotly_dash.apps.DjangoPlotlyDashConfig',
    ...
    ]

The application's routes need to be registered within the routing structure by an appropriate include statement in a urls.py file. Note: django_plotly_dash is not a name of your application, it is referring to the inner namespace of this library. Please do not skip this step:

urlpatterns = [
    ...
    path('django_plotly_dash/', include('django_plotly_dash.urls')),
]

The name within the URL is not important and can be changed.

For the final installation step, a migration is needed to update the database:

./manage.py migrate

The use of frames within HTML documents has to be enabled by adding to the settings.py file:

X_FRAME_OPTIONS = 'SAMEORIGIN'

Further configuration, including live updating to share application state, is described in the online documentation.

Demonstration

The source repository contains a demo application. To clone the repo and lauch the demo:

git clone https://github.com/GibbsConsulting/django-plotly-dash.git

cd django-plotly-dash

./make_env                # sets up a virtual environment for development
                          #   with direct use of the source code for the package

./prepare_redis           # downloads a redis docker container
                          #   and launches it with default settings
                          #   *THIS STEP IS OPTIONAL*

./prepare_demo            # prepares and launches the demo
                          #   using the Django debug server at http://localhost:8000

Usage

To use existing dash applications, first register them using the DjangoDash class. This replaces the Dash class of the dash package.

Taking a very simple example inspired by the excellent getting started documentation:

import dash
from dash import dcc, html

from django_plotly_dash import DjangoDash

app = DjangoDash('SimpleExample')

app.layout = html.Div([
    dcc.RadioItems(
        id='dropdown-color',
        options=[{'label': c, 'value': c.lower()} for c in ['Red', 'Green', 'Blue']],
        value='red'
    ),
    html.Div(id='output-color'),
    dcc.RadioItems(
        id='dropdown-size',
        options=[{'label': i, 'value': j} for i, j in [('L','large'), ('M','medium'), ('S','small')]],
        value='medium'
    ),
    html.Div(id='output-size')

])

@app.callback(
    dash.dependencies.Output('output-color', 'children'),
    [dash.dependencies.Input('dropdown-color', 'value')])
def callback_color(dropdown_value):
    return "The selected color is %s." % dropdown_value

@app.callback(
    dash.dependencies.Output('output-size', 'children'),
    [dash.dependencies.Input('dropdown-color', 'value'),
     dash.dependencies.Input('dropdown-size', 'value')])
def callback_size(dropdown_color, dropdown_size):
    return "The chosen T-shirt is a %s %s one." %(dropdown_size,
                                                  dropdown_color)

Note that the DjangoDash constructor requires a name to be specified. This name is then used to identify the dash app in templates:

{% load plotly_dash %}

{% plotly_app name="SimpleExample" %}

The registration code needs to be in a location that will be imported into the Django process before any model or template tag attempts to use it. The example Django application in the demo subdirectory achieves this through an import in the main urls.py file; any views.py would also be sufficient.

Whilst this example allows for the direct use of existing Dash applications, it does not provide for the sharing or updating of internal state. The online documentation provides details on using these and other additional features.

Development

The make_env script sets up the development environment, and pulls in the packages specified in the dev_requirements.txt file. The check_code script invokes the test suite (using pytest) as well as invoking pylint on both the package and the associated demo.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django_plotly_dash-2.5.1.tar.gz (41.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_plotly_dash-2.5.1-py3-none-any.whl (55.9 kB view details)

Uploaded Python 3

File details

Details for the file django_plotly_dash-2.5.1.tar.gz.

File metadata

  • Download URL: django_plotly_dash-2.5.1.tar.gz
  • Upload date:
  • Size: 41.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.12

File hashes

Hashes for django_plotly_dash-2.5.1.tar.gz
Algorithm Hash digest
SHA256 fde84f641526c22029e7702ed4684db9e31ca2bdef888f520de531abf891f58e
MD5 8daa3d2a515e37dea0ea0b7a705de53c
BLAKE2b-256 b70048bc1aa33e070931d4f56934838e7327bfc7efd70a9aa937e99d9bd3e9b8

See more details on using hashes here.

File details

Details for the file django_plotly_dash-2.5.1-py3-none-any.whl.

File metadata

File hashes

Hashes for django_plotly_dash-2.5.1-py3-none-any.whl
Algorithm Hash digest
SHA256 09e4e43f9ce6e1ff42557beeb15373bc6a0fa5ac0df296ecd1e9adc57b01f703
MD5 e3376cb4d1002b1cb3b6449cb3bf412f
BLAKE2b-256 aa1a090df464c92516ae5b144230177d1509bb3cda2dc5798976646de6c1c8c6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page