我在Django模型中使用了imageField,当我尝试在html中显示图片时无法识别该图片。
这是我的模特。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 }}
是/personal/static/img/[image name]
并且只有当我使用url路径/static/img/[image name]
作为来源时,我的照片才会显示出来。
是否有从/personal
创建的字符串中取出{{ release.cover.url }}
的信息?还是为了使我的img源接受/personal/static/img/[image name]
下的文件?
答案 0 :(得分:3)
如果您也显示了settings.py和urls.py文件,可能会有所帮助,但我猜测您的
开发服务器未设置为提供该personal/static/img/[image name]
文件。要进行设置,您需要调整settings.py和主项目的urls.py文件。
settings.py:
# Add these
MEDIA_ROOT = os.path.join(BASE_DIR, "media")
MEDIA_URL = "/media/"
MEDIA_ROOT
表示在命中MEDIA_URL
时(例如当浏览器要求提供图片时)可以在哪里提供文件。为了实际提供您需要设置视图的文件,有一个内置的帮助器功能可以在开发过程中提供该文件,将其添加到您的主项目urls.py文件中
urls.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>
。您的服务器实际上会知道
现在在哪里找到它。
查看 documentation是一个更好的例子。
您使用的硬编码网址/static/img/[image name]
之所以有效,是因为Django开发服务器默认可以提供项目根目录中static/
目录中的静态文件以及任何{{1 }}应用程序根目录中的文件夹。因此,您在ImageField中的static/
争论创建了upload_to
文件夹是一种快乐的巧合。然后,由于在settings.py中设置了/personal/static/
,因此您可以设置为自动投放。在上面的链接文档中对此进行了描述(更好)。