我正在编写一个有电影和电视节目的网站的后端代码。每部电影都有一张海报,可以在前端使用。这些海报保存在特定的目录文件夹中(比如说“\Posters”)。
我需要的是一个 API,它使用类似 .../Poster/Jumanji_2017.jpg
或.../Poster/Jumanji%202017.jpg
类似电影标题的 URL 发送回图像(例如“Jumanji 2017.jpg”)。
无论如何我可以做到这一点吗?(最好不做图像模型)
我正在编写一个有电影和电视节目的网站的后端代码。每部电影都有一张海报,可以在前端使用。这些海报保存在特定的目录文件夹中(比如说“\Posters”)。
我需要的是一个 API,它使用类似 .../Poster/Jumanji_2017.jpg
或.../Poster/Jumanji%202017.jpg
类似电影标题的 URL 发送回图像(例如“Jumanji 2017.jpg”)。
无论如何我可以做到这一点吗?(最好不做图像模型)
如果您知道BASE_URL
将图像保存在哪个位置,因为部署时您可以保存在外部存储桶(存储)上,那么您可以进行如下操作:
class YourModelSerialiser(serializers.ModelSerializer):
image_url = serializers.SerializerMethodField()
class Meta:
model = YourModel
fields = ('some_field', 'some_other_field', 'image_url')
@staticmethod
def get_image_url(obj):
return BASE_URL + obj.image.url
但是当您不知道或不关心保存图像的存储桶(存储)网址时,您可以使用另一种方法:
class YourModelSerialiser(serializers.ModelSerializer):
image_encoded= serializers.SerializerMethodField()
class Meta:
model = YourModel
fields = ('some_field', 'some_other_field', 'image_encoded')
@staticmethod
def get_image_encoded(obj):
return base64.b64encode(obj.image)
对于这个你必须import base64
然后在你的前端你可以像这样将图像加载为base64
<img src="data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAUA
AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Alt text" />
附言。在第一个示例obj.image.url
中是存储桶中图像的路径(不管它是什么),但您需要完整路径才能在前端加载它。