[使用python views.py从Postgres数据库显示图像

问题描述 投票:0回答:2

我有一个表是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
2个回答
0
投票

您可以将图像转换为二进制数据,并将其存储在postgresql中,以将其用于src转换为base64。或者,您可以存储图像URL并传递给图像src。


0
投票

我建议您使用ImageField代替BinaryFields,除非出于某些原因您没有选择。当您将图像(或任何类型的文件)存储在数据库中时,数据库大小会快速增长,某些托管服务提供商会设置数据库大小的限制。另外,操作较慢,因为如果可以使用html渲染图像,则必须将图像转换为base64。

同样,我的建议是使用ImageField并将图像存储在服务器存储,CDN或其他位置,而不是直接存储在DB中。如果您不能这样做,请尝试将二进制代码转换为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而不是二进制字段来存储图像,因此您不必在每次提供图像时都对图像进行编码。

© www.soinside.com 2019 - 2024. All rights reserved.