首页 > 解决方案 > 在 Django Rest 框架中为图像返回完整的图像 URL

问题描述

我在返回的图像 url 中遇到问题,这是不正确的。

我的返回图片网址是
"/media/slider_image/image/slider_image_4ea48daf-477d-4f00-93cb-7ac87c6f4002.JPG",在此处输入图像描述

但序列化程序预期的实际 URL 是

http://127.0.0.1:8000/media/slider_image/image/slider_image_4ea48daf-477d-4f00-93cb-7ac87c6f4002.JPG

这是我尝试过的代码片段。

class ListSliderSerializer(SliderSerializers):
    images = serializers.SerializerMethodField('get_images')

    def get_images(self, instance):
        return [slider_image.image.url for slider_image in instance.slider_image.all()]


    class Meta(SliderSerializers.Meta):
        fields = (
            'images',
            'section',
            'tag',
        )

我应该返回什么

return [slider_image.image.url for slider_image in instance.slider_image.all()]

获取我的图片的完整网址?

标签: pythondjangoserializationdjango-rest-framework

解决方案


您可以使用request.build_absolute_uri(...)--(doc)方法作为

class ListSliderSerializer(SliderSerializers):
    images = serializers.SerializerMethodField('get_images')

    def get_images(self, instance):
        request = self.context["request"]
        return [
            request.build_absolute_uri(slider_image.image.url)
            for slider_image in instance.slider_image.all()
        ]

    class Meta(SliderSerializers.Meta):
        fields = (
            'images',
            'section',
            'tag',
        )

另请注意,您必须将其作为上下文数据传递request给序列化程序


推荐阅读