问题描述
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)
请通知是否有任何其他错误(代码完美,除了图像)或任何最佳实践
解决方法
您的图片标签应如下所示:
null
或者,如果您已经在 settings.py 和 url 中引用了 /media 路径,它甚至应该看起来像这样:
<img src="/media/{{prod.img.url}}"><br>
例如,如果媒体文件夹位于 manage.py 文件所在的同一目录中(通常是这种情况),则在 settings.py 中添加:
<img src="{{prod.img.url}}"><br>
在你的 urls.py 中是这样的:
MEDIA_URL="/media/"
MEDIA_ROOT = os.path.join(BASE_DIR,'media')