Ответ
В 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.