Django Academy · Урок

ImageField и выдача загруженных файлов

Работайте с изображениями и подключайте медиафайлы в режиме разработки

Урок 4 из 413 шагов

«ImageField и выдача загруженных файлов» — бесплатный урок Django Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Django Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Django Academy содержит 4 уроков всего.

Зачем нужен ImageField

Для изображений используйте ImageField вместо FileField. Он работает так же, но дополнительно предоставляет проверки и помощники для изображений.

avatar = models.ImageField(upload_to='avatars/')

Требуется Pillow

ImageField использует библиотеку Pillow для чтения изображений. Сначала установите её, иначе миграции откажутся запускаться. 🖼️

pip install Pillow

Встроенная проверка

ImageField проверяет, является ли загрузка настоящим изображением. Переименованный файл .txt автоматически отклоняется при проверке формы.

Ширина и высота

Укажите width_field и height_field, и Django запишет размеры каждого изображения в эти столбцы при сохранении.

photo = models.ImageField(
    upload_to='pics/',
    height_field='h', width_field='w')

Отображение изображения

В шаблоне укажите в теге img свойство .url поля, чтобы показать пользователю сохранённое изображение.

<img src="{{ profile.avatar.url }}" alt="avatar">

Проверяйте URL

Вызов .url для пустого поля вызывает ошибку. Оберните его в проверку if, чтобы отсутствие изображения не приводило к сбою страницы.

{% if profile.avatar %}
  <img src="{{ profile.avatar.url }}">
{% endif %}

Значение по умолчанию

Укажите для поля default путь к изображению, чтобы пользователи без загрузки всё равно видели аватар-заполнитель.

models.ImageField(default='avatars/blank.png')

Обслуживание в режиме разработки

Django не обслуживает медиафайлы самостоятельно. В режиме разработки добавьте в URL проекта маршрут от MEDIA_URL к MEDIA_ROOT.

urlpatterns += static(
    settings.MEDIA_URL,
    document_root=settings.MEDIA_ROOT)

Только при DEBUG

Этот помощник для медиафайлов предназначен только для разработки. В рабочей среде загрузки обслуживает настоящий веб-сервер, поэтому защитите маршрут проверкой DEBUG.

if settings.DEBUG:
    urlpatterns += static(...)

Раздача в рабочей среде

В рабочей среде поручите Nginx или сервису хранения, например S3, раздавать медиафайлы напрямую. Пропускать каждое изображение через Django было бы медленно.

Миниатюры позже

Нужны версии изменённого размера? Библиотеки вроде django-imagekit создают миниатюры на основе ImageField, когда Вы будете к этому готовы.

Быстрая проверка

Проверим, что требуется ImageField для работы.

Итоги

Вы узнали, что ImageField требует Pillow, проверяет настоящие изображения, предоставляет .url для отображения, а в рабочей среде медиафайлы следует раздавать за пределами Django. 🎉

Можно начать бесплатно

Изучай Python с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
30
Уроки
120

Часто задаваемые вопросы

Урок «ImageField и выдача загруженных файлов» бесплатный?

Да — полный текст урока «ImageField и выдача загруженных файлов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Django Academy, подпишись на CoddyKit PRO. Курс Django Academy содержит 4 уроков всего.

Чему я научусь в уроке «ImageField и выдача загруженных файлов»?

Работайте с изображениями и подключайте медиафайлы в режиме разработки Ты практикуешь Django Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Django Academy?

Предыдущий опыт не требуется. Django Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «ImageField и выдача загруженных файлов»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Django Academy?

Да. Каждый урок Django Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. STATICFILES и статический тег
  2. collectstatic для рабочего окружения
  3. MEDIA_ROOT и загрузка файлов
  4. ImageField и выдача загруженных файлов
← Назад к Django Academy