python - Django不显示图像
问题描述
我正在尝试使用 python 的 Django 框架构建一个电子商务网站,作为实践项目的一部分。但是,我无法在我的登录页面上显示我的产品图片。
Django 版本:3.2.4
模型.py:
class Listing(models.Model):
title = models.CharField(max_length=100)
price = models.FloatField()
description = models.TextField()
image = models.ImageField(upload_to="auctions/images/", default="")
设置.py:
STATIC_URL = '/static/'
# Managing media
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
网址.py:
from django.contrib import admin
from django.urls import include, path
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path("admin/", admin.site.urls),
path("", include("auctions.urls"))
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
视图.py
def index(request):
listings = Listing.objects.all()
return render(request, 'auctions/index.html', {
"listings": listings
})
索引.html
{% extends "auctions/layout.html" %}
{% load static %}
{% block body %}
<h2>Active Listings</h2>
{% for listing in listings %}
<div class="card" style="width: 18rem;">
<img class="card-img-top" src="{% static listing.image %}" alt="Card image cap">
<div class="card-body">
<h5 class="card-title">{{ listing.title }}</h5>
<p class="card-text">{{ listing.description }}</p>
<p class="card-text">Price - {{ listing.price }}</p>
<a href="#" class="btn btn-primary">Bid</a>
</div>
</div>
{% endfor %}
{% endblock %}
我只获取img
标签的 alt 属性。
解决方案
正如@Pruthvi Barot 所提到的,您需要将您在 html 中使用的代码从
src="{% static listing.image %}"
到
src="{% url listing.image.url %}"
那是因为您将图像作为媒体并允许它们通过您在此处定义的 url 提供服务:
# Managing media
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
在这种情况下,静态文件是您放置在目录中的图像,而不是从 Django 管理面板管理(上传和删除)。
@MojixCoder 提到的另一个解决方案是将上面提到的代码行替换为
src="{{ listing.image.url }}"
这是首选解决方案,并且是Django 官方文档中指定的 MEDIA_URL(版本 3.2)
推荐阅读
- python - 如何在 Django 项目中使用 PostgreSQL 的存储过程或函数
- javascript - Angular UI 中的数据绑定——是推还是拉?我可以让它更快吗?
- sql - 在 Postgres 中查询 xmin 列在查询中产生 xid
- c# - 如何使用 C# 从 CloudFront 获取签名 URL?
- javascript - React JS - 项目构建后对象未呈现
- python - 使用 cx_Oracle 调用函数时,表达式类型错误
- python - 由于 flairnlp 导入问题,无法将 python 脚本部署到谷歌云函数
- node.js - 缓冲区类型视频宽高nodejs
- dialogflow-cx - 对话流 CX | 如何关闭/重置对话
- python - ValueError:尝试使用我的模型预测视频时,没有足够的值来解包(预期为 3,得到 1)