Как заставить Django загружать файлы изображений профиля из каталога "media"

У меня есть каталог '/media/profile_image', в котором сохраняются изображения профиля, загруженные пользователями. В шаблоне я построил url, используя объект user

<img id="profile_image" src="{{ request.user.profile_image.url }}"></div>

что создает правильный url к нужной директории. Но изображение не отображается, почему так?

Работа с Django и медиафайлами при разработке выглядит следующим образом :

  1. Сначала установите подушку pip install pillow на ваш активированный env.

  2. Укажите переменную MEDIA_ROOT в файле настроек. MEDIA_ROOT = os.path.join(BASE_DIR, 'media/') или MEDIA_ROOT = BASE_DIR / 'media' в Django 3.

  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.

Вернуться на верх