Hi,
Which server are you using ? Is is runserver ?
When running in debug mode, it serves statics, but not when debug mode is turned off.
If you Google with "django runserver static debug" you'll get this hit in the very first ones :
https://stackoverflow.com/questions/5836674/why-does-debug-false-setting-make-my-django-static-files-access-fail
The thread explains all the details and gives pointers to the reference documentation.
BTW, never use runserver in production. It is not done for that at all, for performances and security reasons.
Additionally, as explained in Django doc, statics should not be served by the Django app, but by the reverse proxy such as Nginx, which sits in front of the Django app and routes requests to the WSGI server, while serving
directly static assets such as img, js, css...
An other option for statics if you don't want to dive too much into your reverse proxy settings for configuring the static routing is to use Django middlewares such as whitenoise (http://whitenoise.evans.io/en/stable/), which does a quite good job for static serving optimization. This should suffice for sites not too much demanding in terms of traffic.
Best regards
Eric