python - Django ImageField 不会显示在网页上
问题描述
我在我的 Django 模型中使用了一个 imageField,当我尝试在 html 中显示它时无法识别照片。
这是我的models.py
from django.db import models
class LatestRelease(models.Model):
title = models.CharField(max_length=50)
description = models.CharField(max_length=300)
cover = models.ImageField(upload_to='personal/static/img/')
display = models.BooleanField(default=True)
这是view.py
from django.shortcuts import render
from personal.models import LatestRelease
def index(request):
releases = LatestRelease.objects.all()
return render(request, "personal/home.html", {'releases': releases})
HTML 代码
{% for release in releases %}
<img src="{{ release.cover.url }}" class='' height='235' width='235'>
{% endfor %}
所以基本上,图像路径{{ release.cover.url }}
是,我的照片只有在我使用 url 路径作为源/personal/static/img/[image name]
时才会出现。/static/img/[image name]
无论如何要从/personal
创建的字符串中取出{{ release.cover.url }}
?或者让我的img源接受下面的文件/personal/static/img/[image name]
?
解决方案
如果您也显示您的 settings.py 和 urls.py 文件可能会有所帮助,但我猜您的开发服务器未设置为提供该personal/static/img/[image name]
文件。要进行设置,您需要调整 settings.py 和主项目 urls.py 文件。
设置.py:
# Add these
MEDIA_ROOT = os.path.join(BASE_DIR, "media")
MEDIA_URL = "/media/"
MEDIA_ROOT
指示当您被点击时可以从哪里提供文件MEDIA_URL
(例如当您的浏览器要求该图片时)。要实际提供您需要设置视图的文件,有一个内置的帮助函数用于在开发中提供这些文件,将其添加到您的主项目 urls.py 文件中
网址.py:
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
# your other views
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
然后你应该再次上传图片,它会保存media/<upload_to>/<picturename>
在你的情况下media/personal/static/img/<picture_name>
。而且您的服务器现在实际上会知道在哪里可以找到它。
查看 文档以获取更好的示例。
附言
您使用的硬编码 url 可以正常/static/img/[image name]
工作,因为默认情况下,Django 开发服务器可以从static/
项目根目录中的目录以及static/
应用程序根目录中的任何文件夹中提供静态文件。upload_to
因此,您在 ImageField 中的争论创建了该/personal/static/
文件夹,这是一种令人高兴的巧合。然后,由于DEBUG = True
在 settings.py 中设置,您已设置为自动提供它。这在上面的链接文档中有(更好地)描述。
推荐阅读
- hadoop - localhost:权限被拒绝(公钥,密码)
- ibm-cloud - 如何从 Watson Assistant(对话)中提取特殊信息?
- api - 如何使用参数在 Redux 上的天气 API 中获取数据?
- python - 编辑熊猫数据框所有列之间的距离
- html - amp-custom 应该放在 amp-boilerplate 之前还是之后
- java - 我可以创建多少进程和线程?
- google-cloud-platform - 如何通过 GCP 部署管理器更新机器类型属性
- docker - 我可以在不重新构建 docker 映像的情况下更改环境设置吗?
- java - 如何将我的 JSON 属性之一转换为数组?
- fpga - .关于为 RISCV 启动 Linux 内核需要考虑的事项有什么建议吗?