Что такое media-файлы в Django и в чем их отличие от static-файлов

Ответ

В Django media-файлы — это пользовательский контент, загружаемый во время работы приложения (например, аватары пользователей, фотографии к товарам). Они хранятся в файловой системе и их содержимое может меняться.

Ключевое отличие от static-файлов:

  • STATIC: Файлы, необходимые для отображения сайта, которые не меняются в процессе его работы. Они являются частью кодовой базы проекта (CSS, JavaScript, иконки, фоновые изображения).
  • MEDIA: Файлы, создаваемые пользователями. Они не являются частью проекта и должны храниться отдельно.

Настройка

Для работы с media-файлами в settings.py необходимо определить две константы:

# settings.py

# URL-префикс для доступа к файлам из браузера
MEDIA_URL = '/media/'

# Абсолютный путь в файловой системе, где будут храниться загруженные файлы
MEDIA_ROOT = BASE_DIR / 'media'

Чтобы Django мог отдавать эти файлы в режиме разработки (DEBUG=True), необходимо добавить специальный маршрут в корневой urls.py:

# urls.py

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

urlpatterns = [
    # ... ваши основные URL
]

# Это правило работает только в режиме DEBUG
if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Важно: В production-окружении раздачу media-файлов следует доверять веб-серверу (например, Nginx) или облачному хранилищу (S3), а не Django.