When i switch django to production mode, does it stop serving static files?

When you switch Django to production mode by setting DEBUG = False in your settings, the built-in development server will no longer automatically serve static files. This is because the built-in server isn't optimized for this, and serving static files in a production environment using a proper web server (like Nginx or Apache) is both more efficient and secure.

In a production setup, you'll typically follow these steps regarding static files:

Collect Static Files: Use Django's collectstatic management command to gather all static files into a single directory (usually defined by the STATIC_ROOT setting in your Django settings file).

python manage.py collectstatic

Serve Static Files with a Web Server: Configure a web server like Nginx or Apache to serve the static files directly. For instance, in an Nginx configuration, you might have something like:

location /static/ {
    alias /path/to/your/static/root/;
}

Set STATIC_URL: Ensure that the STATIC_URL setting in your Django settings file points to the correct URL where your static files will be served. Typically, this might be something like:

STATIC_URL = '/static/'

Remember, it's important to separate the responsibilities in a production environment:

  • Django and WSGI Servers: Handle dynamic content.
  • Web Servers (Nginx/Apache): Handle incoming requests, SSL/TLS, serve static and media files, and possibly act as a reverse proxy to the WSGI server.

This approach maximizes efficiency, security, and scalability.