Django中的ImageField无法在网页上显示

4

我可以帮助你翻译这段内容。这是一个关于IT技术的问题,涉及到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 }}/personal/static/img/[图像名称],只有当我使用url路径/static/img/[图像名称]作为源时,我的照片才会显示出来。
有没有办法从{{ release.cover.url }}创建的字符串中去掉/personal?或者让我的img源接受/personal/static/img/[图像名称]下的文件?
1个回答

8
这可能有所帮助,如果您也能展示您的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>。现在你的服务器实际上知道去哪里找到它了。
请查看文档以获得更好的示例。
顺便说一句,您使用的硬编码URL/static/img/[image name]之所以起作用,是因为Django开发服务器默认情况下可以从项目根目录中的static/文件夹以及应用程序根目录中的任何static/文件夹中提供静态文件。因此,你在ImageField中创建了/personal/static/文件夹是一种巧合。然后由于在settings.py中设置了DEBUG = True,因此您已经自动设置为提供服务。这在上面链接的文档中有更好的描述。

谢谢,这个方法很有效,对我理解很有帮助! - Jordan Harris
1
很酷,很高兴能帮到你。 - c6754

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接