Изображение в веб-браузере не отображается

Изображение в веб-браузере не отображается, отображается сообщение атрибута alt, я использую легкий сервер Django, не только это, но изображение не отображается даже в простом статическом html-файле, но оно отображается, когда его адрес вставлен в строку поиска браузера.

шаблон

<!DOCTYPE html>

{% load static %}
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
{% for prod in allProds %}
{{prod.name}}<br>
<img src="/media/{{prod.img}}"><br>
{{prod.img}}
{{prod.smdesc}}<br>
{{prod.bgdesc}} <br>
{% endfor %}

</body>
</html>

модели.py

from django.db import models
import uuid
from django.contrib.auth.models import User

class Category(models.Model):
    category = models.CharField(max_length=50)

class SubCategory(models.Model):
    sub_category = models.CharField(max_length=50)

class Product(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    name = models.CharField(max_length=40)
    img = models.ImageField(upload_to='shop/images')
    smdesc = models.CharField(max_length=100)
    bgdesc = models.CharField(max_length=400)
    price = models.IntegerField()
    in_Stock = models.IntegerField(default=0)
    discount = models.IntegerField(default=0)
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    sub_category = models.ForeignKey(SubCategory, on_delete=models.CASCADE)
    date_added = models.DateField(auto_now=True)

    def __str__(self):
        return f"{self.name} of {self.price}"

class Cart(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    cart_items = models.ManyToManyField(Product, blank=True, related_name="cart_items") 

просмотры.py

from django.shortcuts import render
from .models import Product
# Create your views here.
def index(request):
    allProds = Product.objects.all()
    context = {
        'allProds':allProds
    }
    return render(request, 'ecom/index.html',context)

Пожалуйста, сообщите, если есть какая-либо другая ошибка (код работает идеально, кроме изображения) или какая-либо передовая практика.


person Aditya Singh    schedule 23.03.2021    source источник
comment
Отвечает ли это на ваш вопрос? Django: получить URL-адрес ImageField в поле зрения   -  person Ivan Starostin    schedule 23.03.2021


Ответы (1)


Ваш тег изображения должен выглядеть так:

<img src="/media/{{prod.img.url}}"><br>

Или, если вы уже указали путь /media в settings.py и URL, он должен выглядеть примерно так:

<img src="{{prod.img.url}}"><br>

Например, если папка мультимедиа находится в том же каталоге, что и файл manage.py (обычно это так), в settings.py вы добавляете следующее:

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

И в вашем urls.py что-то вроде этого:

from django.urls import path,include
from django.conf.urls.static import static
from django.conf import settings
path('', include('your_app.urls')),
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
person Marijana    schedule 23.03.2021
comment
Спасибо, бро!! ???????? - person Aditya Singh; 23.03.2021