Local assets

Local ploty dash assets are integrated into the standard Django staticfiles structure. This requires additional settings for both staticfiles finders and middleware, and also providing a list of the components used. The specific steps are listed in the Configuration options section.

Individual applications can set a serve_locally flag but the use of the global setting in the PLOTLY_DASH variable is recommended.

Additional components

Some components, such as dash-bootstrap-components, require external packages such as Bootstrap to be supplied. In turn this can be achieved using for example the bootstrap4 Django application. As a consequence, dependencies on external URLs are introduced.

This can be avoided by use of the dpd-static-support package, which supplies mappings to locally served versions of these assets. Installation is through the standard pip approach

pip install dpd-static-support

and then the package should be added as both an installed app and to the PLOTLY_COMPONENTS list in settings.py, along with the associated middleware

INSTALLED_APPS = [
    ...
    'dpd_static_support',
]

MIDDLEWARE = [
    ...
    'django_plotly_dash.middleware.ExternalRedirectionMiddleware',
]

PLOTLY_COMPONENTS = [
    ...
    'dpd_static_support'
]

Note that the middleware can be safely added even if the serve_locally functionality is not in use.

Known issues

Absolute paths to assets will not work correctly. For example:

app.layout = html.Div([html.Img(src=localState.get_asset_url('image_one.png')),
                       html.Img(src='assets/image_two.png'),
                       html.Img(src='/assets/image_three.png'),
                       ])

Of these three images, both image_one.png and image_two.png will be served up - through the static files infrastructure - from the assets subdirectory relative to the code defining the app object. However, when rendered the application will attempt to load image_three.png using an absolute path. This is unlikely to be the desired result, but does permit the use of absolute URLs within the server.