Web 浏览器中的图像未被渲染

Image in web browser not getting rendered

Web 浏览器中的图像未呈现,显示 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>

models.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") 

views.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)

如果有任何其他错误(代码完美,图像除外)或任何最佳实践,请通知

您的图片标签应如下所示:

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

或者,如果您已经在 settings.py 和 url 中引用了 /media 路径,它甚至应该看起来像这样:

<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)