Я использую Django ImageField, но не могу получить доступ к изображениям на своей веб-странице.
это models.py
from django.db import models
# Create your models here.
class Products(models.Model):
name_product=models.CharField(max_length=100)
category_product=models.CharField(max_length=100)
price_product=models.CharField(max_length=200)
image_product=models.ImageField(default='Image.png',upload_to='web/')
description_product=models.CharField(max_length=400)
это views.py
from django.shortcuts import render
from .models import Products
# Create your views here.
def asli(request):
data=Products.objects.all()
return render(request,'home.html',{'data':data})
Это моя веб-страница
<img src="{{ data.image_product.url }}" alt="Product Image">
Я попробовал этот код в setting.py, но он все равно не показывает мои фотографии на моей веб-странице. P.s: Соединение было установлено правильно
MEDIA_URL = "media/"
MEDIA_ROOT = BASE_DIR / "media"
Если вы поместите <img>
в такой блок:
{% for item in data %}
{% endfor %}
где вы пишете item
после for
, то вам нужно изменить {{ data.image_product.url }}
на {{ item.image_product.url }}
.
1. Вы должны убедиться, что ваши медиафайлы будут обслуживаться на указанном MEDIA_URL
, так как Django не будет делать это за вас. Вы можете использовать локальный сервер Django, поскольку вы все еще находитесь в режиме DEBUG
.
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [•••Rest of code•••]
if settings.DEBUG:
urlpatterns += [
static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
]
2. data
- это QuerySet
. Чтобы получить каждое значение внутри него, необходимо выполнить итерацию. См. тег шаблона for
.
{% for product in data %}
<p>{{ product.name_product }} </p>
<p>{{ product.category_product }} </p>
<p>{{ product.price_product }} </p>
<img src="{{ product.image_product.url }}" alt="{{ product.name_product }}" />
<p>{{ product.description_product }} </p>
{% endfor %}
1. Configure urls.py
Убедитесь, что вы добавили следующую конфигурацию в ваш основной файл urls.py для обслуживания медиафайлов
from django.conf import settings
from django.conf.urls.static import static
urlpatters = [
# url
] + static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)
2. Update Your Template
В своем шаблоне вы можете получать и отображать изображения, используя следующий пример. Убедитесь, что вы используете атрибут URL поля image, чтобы получить правильный путь к изображению.
{% for i in data %}
<p> {{ i.name_product }} </p>
<p> {{ i.category_product }} </p>
<p> {{ i.price_product }} </p>
<img src="{{ i.image_product.url }}"/>
<p> {{ product.description_product }} </p>
{% endfor %}
Примечание: Обязательно добавьте URL при получении изображения {{i.image_product.url }}