在 Django 中显示来自模型的图像

Show an image from models in Django

我想弄清楚如何用图像解决这个问题,但我找不到答案。我正在尝试将我的模型 'ImageField' 显示到模板。

我通过管理站点上传了一张图片,当我想显示它时,我无法正确渲染图片(它出现了一个图标,但看不到图片)。

我试图从中显示图像的模型对 ImageField 有以下声明:

figure = models.ImageField(upload_to='static/img/list-icons',
                               blank=True,
                               null=True,
                               verbose_name=_("Figure"))

作为 'upload_to' 路径是存储图像的静态文件目录的路径。我正在尝试使用此代码获取模板中的图像(我尝试了几种组合):

{% for quiz in quiz_list %}

            <tr>
              <td>{{ quiz.title }}</td>
              <td>{{ quiz.category }}</td>
              <td><img src="{{ quiz.figure.url }}" /></td>
              <td>{{ quiz.single_attempt }}</td>
            </tr>

        {% endfor %}

模型是 Quiz(ListView),我没有更改 views.py 的任何内容(最近刚刚添加了图像字段)。是否需要添加一些声明?什么样的?

我在 settings.py 中添加了 'MEDIA_ROOT' 的近似值,以及我的静态图像目录的路径(与模型中的 upload_to 相同),我也'我不确定如何定义或是否有必要定义 'MEDIA_URL'.

如何直接从模型中显示图像(我也试过 {{quiz.figure}} 但只显示了 'upload_to' 路径),从它们所在的静态目录中选择它们?帮助将不胜感激,谢谢。我会回答添加所需的附加信息。

编辑 1: 它现在输出的内容就是这样:

Capture of what it outputs

我的 urls.py 文件结尾是这样的:

+ static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

我认为需要 CSS 像现在这样正常工作。

您没有正确渲染图像。

你应该更换

<td><img src="quiz.figure.url" /></td>

<td><img src="{{ quiz.figure.url }}" /></td>

更新: 您的项目 urls.py 中似乎没有媒体 url 条目。在项目 urls 中,执行此操作:

from django.conf import settings
from django.conf.urls.static import static
...
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

此外,请确保您在 settings.py

中定义了适当的设置
# Media files
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'