Как отобразить медиа файлы, загруженные через админ. панель в django?
Не получается отобразить изображение, загруженное через админ. панель в джанго
settings.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
os.path.join(BASE_DIR, 'templates')
],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'django.template.context_processors.request',
'django.template.context_processors.media', # медиа
],
},
},
]
MEDIA_ROOT = os.path.join(BASE_DIR, 'assets/media')
MEDIA_URL = '/media/'
В папке assets/media изображения после загрузки появились.
Код в шаблоне:
<img src="{{MEDIA_URL}}{{p.img.url}}" alt="">
<img src="{{p.img.url}}" alt="">
При переходе по адресу http://127.0.0.1:8000/media/myimage.png изображение тоже не отображается
UPD: добавил в urls.py:
from django.conf.urls.static import static
from django.conf import settings
urlpatterns = [ ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
И заработало. Это какой-то костыль? При deploy это оставлять или менять нужно будет?
Ответы (2 шт):
Разницы, как и где вы загружаете файл на сервер, нет, админ-панель - просто дефолтная страница для работы с бд из браузера, точно так же вы можете ручками из СУБД создать новую запись, разницы не будет.
То, что вы сделали, не совем костыль. Вот ссылка на доки, там всё расписано. По-хорошему, это только для разработки, но по своему опыту знаю, что иногда это и на проде оставляют.
В корне, где лежит settings в urls, в низу где-нибудь добавит:
urlpatterns +=static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)