I’ve been using flask for quite sometime and being new to dash has got me wondering how i can include my static file like images, my JavaScript and css…
in flask i could include a line like "app= Flask(‘name’, static_url_path=‘my-static-directory’)"
This has got me wondering how this is possible with dash.
i have an application i did in flask using pygal but i need dash features replacing pygal.
just been wondering how i can do it without running two servers on the same machine
you need to add a static folder and add the code
import flask
import os
STATIC_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'static')
@app.server.route('/static/<resource>')
def serve_static(resource):
return flask.send_from_directory(STATIC_PATH, resource)
i still don’t understand… could you maybe show me an example using “import dash” replacing “import flask”… then kindly show me how i could include my javascript, css and image files in dash.
If you havent already, i suggest you look at the following thread, it worked for my case.
https://community.plotly.com/t/serve-locally-option-with-additional-scripts-and-style-sheets/6974
The simplest way to enable static file support with Dash is to do this:
app = Dash(__name__, static_folder='static')
Then create a folder static
in the same directory as your Python script and your files will be available as eg /static/foo.png
Just an update on this, Dash now makes getting static files working a little easier than previously. Dash now follows Flask in providing a static_folder
default of static
which means it’s enough to create your Dash instance and then create a static
folder in the same directory as your Dash app and it should just work out of the box:
app = Dash()
Obviously you can still provide a different value of static_folder
if you want.
One caveat to this is that Dash supplies Flask with a default name
param of __name__
. This parameter tells Flask the import name of the app so that it can work out where the path of /static
is relative to. This default value will work for Dash apps run as command line scripts (ie with if __name__ == '__main__':
) and as single modules, however if it’s part of a package you’ll want to specify the name of the package. See the Flask docs for more on this.
This all works fine, locally, for me. However, when I go to deploy my app, none of my logos appear. Any guidance why? I have:
app = dash.Dash(
__name__,
static_folder='static'
)
and the element <img src="static/logo.png" style="display: inline-block; height: 100%; float: right;">
does exist on my page. However, the logo does not render. If I run it locally, the logo does render.
Nevermind; I was able to fix this, by using the StaticUrlPath
method.
@chriddyp: I wondering why I set locally server is True, but it doesnot work.
The network snip is bellow:
Dash now follows Flask in providing a
static_folder
default ofstatic
which means it’s enough to create your Dash instance and then create astatic
folder in the same directory as your Dash app and it should just work out of the box:
The problem of the solution is it serves assets as “www.example.com/static/ads.txt”.
I needed to serve my file on root as “www.example.com/ads.txt”
So I copied code from Allowing users to download CSV on click - #3 by scottschmidt
import flask
@app.server.route("/ads.txt")
def serve_static():
return flask.send_file("./static/ads.txt", mimetype="text")
Looks this is working …