Как заставить Django загружать файлы изображений профиля из каталога "media"
У меня есть каталог '/media/profile_image', в котором сохраняются изображения профиля, загруженные пользователями. В шаблоне я построил url, используя объект user
<img id="profile_image" src="{{ request.user.profile_image.url }}"></div>
что создает правильный url к нужной директории. Но изображение не отображается, почему так?
Работа с Django и медиафайлами при разработке выглядит следующим образом :
Сначала установите подушку
pip install pillow
на ваш активированный env.Укажите переменную MEDIA_ROOT в файле настроек.
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
илиMEDIA_ROOT = BASE_DIR / 'media'
вDjango 3
.(Необязательно) Укажите также переменную MEDIA_URL. URL, который обрабатывает медиа, обслуживаемое с
MEDIA_ROOT
.
Пример :
MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR / 'media' # or os.path.join(BASE_DIR, 'media/') in Django 2
В вашей модели вы можете определить медиафайл следующим образом :
class Profile(models.Model):
# Others fields
photo = models.ImageField(upload_to="photos/")
Здесь upload_to
используется для указания места, где изображения, назначенные атрибуту photo, будут сохранены на жестком диске для всех экземпляров модели. Если вы не укажете значение для upload_to
, изображения будут сохранены в корень папки MEDIA_ROOT
.