I use whitenoise for static files and it works fine.
But how can I serve the /favicon.ico
file?
There is a setting called WHITENOISE_ROOT, but I don’t understand how to use it.
I would like to keep my nginx config simple and serve all files via gunicorn
3
Answers
If you want those files to be managed by
collectstatic
Let’s assume after running
collectstatic
, yourfavicon.ico
file ends up being copied in aroot
subdirectory, located in yourSTATIC_ROOT
directory.Then, with:
Whitenoise will serve all files in
STATIC_ROOT/root/
at the root of your application.In your case,
STATIC_ROOT/root/favicon.ico
will be served at/favicon.ico
.If you don’t want those files to be managed by
collectstatic
You can have a
root_staticfiles
folder in yourBASE_DIR
which simply contains the static files you want to serve at/
.In this case, Whitenoise will serve all files in
BASE_DIR/root_staticfiles/
at the root of your application.Update about
pathlib
(2022-10-04)Since a while now, the default
settings.py
Django creates usespathlib
. To be consistent with it, one may replaceos.join
calls with/
operators, eg.:I have a django app that uses Whitenoise (hosted on Heroku) and serves my favicon from a separate folder from my static files.
Make a folder
root_files
at pathBASE_DIR/root_files
.In settings.py:
For a real-life code example checkout Mozilla’s Bedrock repo. They have favicons in
BASE/root_files
and configureWHITENOISE_ROOT
in settings.pyYou could as per this answer by hanleyhansen add the following line in a base template (used by all further templates):
Or you could write a redirect view like this answer by wim with some little modification: