Django ImageField将不会显示在网页上

时间:2018-09-22 01:18:53

标签: python html django model imagefield

我在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]下的文件?

1 个答案:

答案 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是一个更好的例子。

P.S。

您使用的硬编码网址/static/img/[image name]之所以有效,是因为Django开发服务器默认可以提供项目根目录中static/目录中的静态文件以及任何{{1 }}应用程序根目录中的文件夹。因此,您在ImageField中的static/争论创建了upload_to文件夹是一种快乐的巧合。然后,由于在settings.py中设置了/personal/static/,因此您可以设置为自动投放。在上面的链接文档中对此进行了描述(更好)。