ImageField и выдача загруженных файлов
Работайте с изображениями и подключайте медиафайлы в режиме разработки
«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 — локальная установка не требуется.
Все уроки этого курса
- STATICFILES и статический тег
- collectstatic для рабочего окружения
- MEDIA_ROOT и загрузка файлов
- ImageField и выдача загруженных файлов