Handling Static and Media File Serving in Django

As a Django developer, it's essential to understand how to handle static and media files in your web application. Static files include CSS stylesheets, JavaScript files, and images, while media files refer to user-uploaded files like images, videos, or audio.

In this article, we will explore the best practices for serving static and media files in Django.

Static Files

Django provides a built-in way to handle static files during development and deployment. To get started, make sure to have a dedicated directory for your static files in your project's root folder.


During development, Django's runserver command will automatically serve your static files. However, you need to configure the static file settings in your project's settings.py file.

  1. Open your settings.py file and find the STATIC_URL setting. By default, it should be set to /static/.
  2. Ensure that you have the django.contrib.staticfiles app added to your INSTALLED_APPS.

Now, whenever you reference a static file in your templates, use the static template tag to generate the correct URL dynamically. For example:

{% load static %}

<link rel="stylesheet" href="{% static 'css/style.css' %}">


In a production environment, Django does not serve static files by default, as it can significantly impact the application's performance. Instead, you should configure your web server to serve static files directly.

  1. Before deploying, collect all the static files into a single location by using the collectstatic management command: python manage.py collectstatic.
  2. Set up your web server (e.g., Nginx or Apache) to serve the static files from the location specified in your STATIC_ROOT setting.

Media Files

Handling media files in Django is similar to handling static files, but with a few additional configurations.


  1. First, in your settings.py file, define a media file storage location by setting the MEDIA_ROOT setting to the desired file system path.
  2. Next, specify the URL prefix for media files using the MEDIA_URL setting. By default, it should be set to /media/.
  3. To handle user-uploaded files, add django.core.files.storage.FileSystemStorage to your DEFAULT_FILE_STORAGE setting.

Development and Deployment

During development, you can serve media files in a similar way to static files. However, you need to add a URL pattern in your urls.py file to handle media file serving.

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # Your other URL patterns
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

This configuration allows Django to serve media files by appending the media URL prefix to the media file's relative path.

In a production environment, it is recommended to serve media files using a separate media server or cloud storage service. This setup ensures scalability, ease of backup, and reduced load on the application server.


Handling static and media files is an essential aspect of any modern web application. Django provides convenient features for serving static files during development and facilitating file storage and retrieval for user-uploaded media files.

By following the best practices mentioned in this article, you can ensure efficient, scalable, and smooth handling of static and media files in your Django application.

noob to master © copyleft