【问题标题】:My database images get deleted from Heroku after some time, but the logo which is not in the database is not deleted [duplicate]一段时间后,我的数据库图像从 Heroku 中删除,但未删除数据库中的徽标 [重复]
【发布时间】:2020-04-25 03:01:16
【问题描述】:

我的数据库图像已从 Heroku 中删除,但徽标并未删除。 我使用静态以这种形式显示徽标:

<img src="{% static 'img/techshelta_logo.png' %}">

但我的数据库图像显示不使用静态:

<img src="{{ object.image.url }}" class="img-fluid" alt="object.title">

这就是 Heroku 删除它们的原因吗?

注意 当我尝试使用下面示例中的静态来在本地显示数据库图像时,它们不会显示

<img src="{% static 'object.image.url' %}" class="img-fluid" alt="object.title" > 

【问题讨论】:

  • 那些是上传的图片,不是静态文件,所以使用{% static %}没有意义。您的静态文件是代码存储库的一部分(如您的徽标),您上传的图像被保存到一些存储中。你的媒体存储是什么?您不应该将它们保存在本地(到磁盘),因为 Heroku 会在您每次更新应用程序以及每次将代码放在不同实例上时都会删除本地存储。使用第三方云存储提供商,例如 Amazon S3 或 Cloudinary。

标签: django heroku-postgres


【解决方案1】:

在我看来,这三行意味着三个不同的指令。

说明 1

<img src="{% static 'img/techshelta_logo.png' %}>"

这意味着从静态目录的 img 子文件夹中加载 techshelta_logo.png。这应该始终有效,因为 http 服务器在正常情况下不太可能自行删除

说明-2

 <img src="{{ object.image.url }}" class="img-fluid" alt="object.title">

此指令意味着您将对象从视图传递到模板。该对象具有一个属性图像,该属性图像具有一个字段 url。由于这作为保存图像的完整位置/路径存储在数据库中,因此这很可能也有效。

说明 3

<img src="{% static 'object.image.url' %}" class="img-fluid" alt="object.title" > 

'object.image.url' 最有可能存储图像的完整路径。当您将此指令放在静态标记之后时,静态路径(在 SETTINGS.py 中定义)被添加到“object.image.url”给出的已经完整路径之前。最终结果是路径不存在,因此无法显示图像。

说了这么多,我不知道 Heroku 为什么要删除图像。可能是一些没有引起您注意的指令被传递到数据库,或者它可能是一些微妙的东西。我无法对此发表评论。

希望这会有所帮助。如果需要进一步说明,请告诉我。

【讨论】:

  • 上传的文件永远不会存储在数据库中。它们由DEFAULT_FILE_STORAGE 存储,默认情况下是FileSystemStorage 位置MEDIA_ROOT
  • 是的,但是 Object.image.url 将位置存储在数据库中。图像本身存储在媒体指令所在的任何位置。我可能错了,但这是我在不知道应用程序模型结构的情况下的猜测。
  • 正确,但您说“这可能也有效”,问题是为什么它不起作用,以及为什么 heroku 会删除图像。正是你没有回答的那部分。原因是它每次更新都会删除存储在磁盘上的所有内容。
  • @dirkgroten 你是对的。主要关心的是帮助解决问题。在我看来,“为什么 Heroku 会删除”是一个子问题。我认为主要的反应应该是帮助他了解为什么某些命令有效而其他命令无效。是的,你是对的,我没有回答 Heroku 删除的子问题。你已经有效地回答了这个问题。但是,我对要求的理解可能是错误的。
  • OP 首先展示他/她如何正确显示静态图像和上传的图像(最初有效)。然后询问为什么上传的图像会被 Heroku 删除,以至于它们最终不会出现。最后作为注释(几乎不能被视为主要问题)OP提到他/她尝试了 {% static %} 方法。您的解释有助于解释为什么注释中的代码不起作用。
猜你喜欢
  • 2021-08-15
  • 1970-01-01
  • 2013-05-28
  • 1970-01-01
  • 2019-06-22
  • 2023-03-26
  • 1970-01-01
  • 2017-12-05
  • 1970-01-01
相关资源
最近更新 更多