Django получить загруженные изображения
Я создал модель для получения изображений и загрузки их в папку upload, и ссылка доступна в базе данных. Но когда я вызываю изображение в моем index.html, оно не работает
settings.py
USERFILES_DIRS = os.path.join(BASE_DIR, 'upload')
STATIC_URL = '/static/'
STATICFILES_DIRS = [
USERFILES_DIRS,
os.path.join(BASE_DIR, 'static'),
]
models.py
class MyShoes(models.Model):
title = models.CharField(max_length=50)
description = models.CharField(max_length=50)
price = models.DecimalField(max_digits=10, decimal_places=2)
display_picture = models.ImageField(upload_to='upload', height_field=None,width_field=None, max_length=None)
featured = models.BooleanField()
views.py
def myIndex(request):
myShoes = models.MyShoes.objects.all()
return render(request,'index.html',{'myshoes':myShoes})
HTML
{% for x in myshoes %}
<div class="card" style="width: 18rem;">
<img src="{{x.display_picture}}" class="card-img-top" alt="...">
<div class="card-body">
<h5 class="card-title">{{x.title}}</h5>
<p class="card-text">{{x.description}}</p>
<p class="card-text">{{x.price}}</p>
{{x.display_picture}}
<a href="" class="btn btn-primary">Go somewhere</a>
</div>
</div>
{%endfor%}
здесь в моем HTML я получаю url 'upload/shoe-1384193-1279x850.jpg' но HTML показывает его в теге img
попробуйте это
# {{x.display_picture.url}} <!-- from the media url -->
{% for x in myshoes %}
<div class="card" style="width: 18rem;">
<img src="{{x.display_picture.url}}" class="card-img-top" alt="...">
<div class="card-body">
<h5 class="card-title">{{x.title}}</h5>
<p class="card-text">{{x.description}}</p>
<p class="card-text">{{x.price}}</p>
{{x.display_picture}}
<a href="" class="btn btn-primary">Go somewhere</a>
</div>
</div>
{%endfor%}
Подробнее об изображении (медиа) в django
https://docs.djangoproject.com/en/3.2/topics/files/#using-files-in-models
from django.conf.urls.static import static
from django.conf import settings
urlpatterns = [
path('admin/', admin.site.urls),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
MEDIA_URL
и MEDIA_ROOT
необходимо добавить urlpatterns
в проект urls.py
,
вместе с MEDIA_URL
и MEDIA_ROOT
, определенными в settings.py
файле
MEDIA_URL = '/'
MEDIA_ROOT = os.path.join(BASE_DIR, '')