使用 python views.py 显示来自 Postgres 数据库的图像



>我有一个表是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">

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

我建议您使用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 而不是二进制字段存储图像,这样就无需在每次提供图像时对图像进行编码。

最新更新