【问题标题】:"Could not load the image" from Django's media folder“无法加载图像”来自 Django 的媒体文件夹
【发布时间】:2019-10-16 05:53:19
【问题描述】:

我正在尝试显示来自数据库(SQLite、Django2.7)的图像。这些图像存储在根目录/媒体/图片中。

models.py

class News(models.Model):
    news_id         = models.AutoField(primary_key=True, editable=False)
    news_img        = models.FileField(upload_to="pictures/",validators=[FileExtensionValidator(allowed_extensions=['svg'])] )

urls.py

urlpatterns = [...]
urlpatterns += staticfiles_urlpatterns()
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

settings.py

MEDIA_ROOT  = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

我尝试通过以下方法在 var 中插入路径:

template.html

{% for news_f in news_f%}
<div>
  <img src="{{ media }}{{news_f.news_img}}">
</div>
{% endblock %}

{% for news_f in news_f%}
<div>
  <img src="{{news_f.news_img.url}}">
</div>
{% endblock %}

当我在浏览器中检查元素时,我得到了文件的正确路径。

<img src="/media/pictures/file.svg">

但它没有显示在 HTML 中:

Could not load the image

【问题讨论】:

  • 我已经尝试过这个解决方案2010 solution,但没有任何反应
  • 你能在另一个标签页中打开并查看图像吗?

标签: python html django


【解决方案1】:

这是因为 django 不提供静态文件。通常你使用 django 和一些像 nginx 这样的网络服务器,这些服务器是更可靠的服务文件。

请查看 django 文档https://docs.djangoproject.com/en/2.2/howto/static-files/deployment/

【讨论】:

  • 我用 .jpg 和 .png 尝试过同样的方法,但没有任何改变。
  • 只要我记得在开发中它提供文件但在生产中它没有,这是你的问题吗?
  • 是的,我尝试将 .svg 添加到 MIME 类型,但这是 Django 1.x (2010) 的解决方案。 Django 2x 还有其他解决方案吗?
【解决方案2】:

您对媒体文件的配置是正确的,问题是 Django 默认不提供具有正确 mime 类型的 SVG 文件,this answer 解释了如何使其工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-09
    • 2020-10-21
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    • 1970-01-01
    • 1970-01-01
    • 2019-05-21
    相关资源
    最近更新 更多