Django. model.ImageField

Недавно начал работу с Django и натолкнулся на проблему. Из формы (администратора) запрашивается изображение. С загрузкой всё корректно, но файл сохраняется в корень, а мне нужно, чтобы он сохранялся в static, т.к. потом я вызываю этот файл через {% load static %}. Почему-то в HTML-коде файл высвечивается только из статика, а из корня нет. Приходилось вручную вырезать и вставлять файл в нужную папку. Помогите, пожалуйста, прописать пусть сохранения из класс models.ImageField в /static. Заранее, спасибо


Ответы (1 шт):

Автор решения: 5c0rp

Django вроде как не загружает изображения с помощью {% load static %}. Вам нужно в файле settings.py указать MEDIA_URL и MEDIA_ROOT. Пример использования:

settings.py

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

urls.py

from django.conf.urls.static import static
from django.conf import settings
urlpatterns = [....
    ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

models.py

class TestModel(models.Model):
    image = models.ImageField(upload_to='users/', blank=True, null=True)

По итогу путь к картинке будет иметь вид /media/users/your_image.jpg.

Далее передаёте при рендеринге передаёте это объект в ваш темплейт. Ссылка на картинку доступна через object.image.url.

→ Ссылка