【问题标题】:Display image from Postgres Database using python views.py使用 python views.py 从 Postgres 数据库显示图像
【发布时间】:2020-03-31 15:06:51
【问题描述】:

我有一个表是 postgres 数据库,该表的列名称为 castimage,数据类型为 bytea。我使用查询将图像插入到列中(它显示[二进制数据])。

当我试图在我的 HTML 页面中显示图像时,它没有显示。

有没有办法在我的页面中显示图像?或者我应该更改用于存储图像的字段数据类型吗?

views.py

def search(request):
    FormSearchMovies1=FormSearchMovies()
    image=Tblcast.objects.get()
    return render(request,"search.html",{'FormSearchMovies1':FormSearchMovies1,'image': image})

models.py

class Tblcast(models.Model):
    castid = models.AutoField(primary_key=True)
    castname = models.CharField(max_length=100)
    castimage = models.BinaryField()

HTML

<img src="{{image.castimage.url}}" alt="CastImage" class="img-fluid">

【问题讨论】:

  • 为什么不用文件字段?

标签: python sql django postgresql django-models


【解决方案1】:

我建议您使用ImageField 而不是 BinaryFields,除非由于某种原因您没有选择。当您在数据库中存储图像(或任何类型的文件)时,您的数据库大小会增长得非常快,一些托管服务提供商会设置数据库大小的限制。此外,操作速​​度较慢,因为如果您可以在 html 中呈现它们,则必须将图像转换为 base64。

同样,我的建议是使用 ImageField 并将图像存储在您的服务器存储、CDN 或其他地方,但不要直接存储在您的数据库中。如果做不到,请尝试将二进制代码转换为base64:

import base64
img_bi = Tblcast.objects.get(pk=1).castimage
encoded_img = base64.b64encode(img_bi)
# pass encoded_img to the template into a context var

您需要在该代码中添加错误检查;)

<img src="data:image/jpeg;base64,{{ encoded_img }}" alt="my_img">

如果您无法将该字段更改为 ImageField,请重新考虑使用 base64 而非二进制字段来存储图像,这样您就无需在每次提供图像时对图像进行编码。

【讨论】:

    【解决方案2】:

    您可以将图像转换为二进制数据并将其存储在 postgresql 中,以便在 src 转换为 base64 时使用它。或者您可以存储图片 url 并传递给图片 src。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-03
      • 1970-01-01
      • 1970-01-01
      • 2014-02-21
      • 2012-03-16
      • 1970-01-01
      • 2021-05-31
      相关资源
      最近更新 更多