Приложение Django не загружает изображение, загруженное пользователем
Я использовал Django Admin для загрузки изображения и пытаюсь заставить его отображаться в шаблоне. Текст alt
отображается, но я продолжаю получать ошибку 404
для изображения, и оно не отображается. Когда я загрузил изображение, путь, который он извлекает в шаблоне media/images/mari-profile-pic.png
, является действительным и содержит изображение, которое я пытаюсь отобразить.
models.py
from django.db import models
# Create your models here.
class Image(models.Model):
title = models.CharField(max_length=50)
image = models.ImageField(upload_to='images/')
views.py
from django.shortcuts import render
from django.http import HttpResponse
from .models import Image
# Create your views here.
def index(request):
imageModel = Image.objects.get(pk=1)
return render(
request,
"SocialLinks/index.html",
{
"profile_pic_title":imageModel.title,
"profile_pic":imageModel.image
}
)
index.html template
<div id="profile">
<img id="userPhoto" src="{% get_media_prefix %}{{ profile_pic }}" alt="{{ profile_pic_title }}">
</div>
settings.py
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
Я пробовал удалять и добавлять тег {% get_media_prefix %}
, но изображение все равно не отображается.
settings.py:
MEDIA_URL = '/media/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
VENV_PATH = os.path.dirname(BASE_DIR)
STATIC_ROOT = os.path.join(VENV_PATH, 'static_root')
MEDIA_ROOT = os.path.join(VENV_PATH, 'media_root')
your.html:
{% load static %}
Для того, чтобы имги работали, добавьте .url в таком виде: {{ i.img.url }}, и перейдите в urls.py приложения, и добавьте следующее:
from django.conf import settings
from django.conf.urls.static import static
if settings.DEBUG:
urlpatterns += static(settings.STATIC_URL,
document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL,
document_root=settings.MEDIA_ROOT)
Вызовите шаблоны и статику из (PROJECTNAME/settings.py
), добавив следующее в TEMPLATES
'DIRS'
:
'DIRS': [os.path.join(BASE_DIR, 'temp')],