You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Django REST API中移除图片链接的主机名

刚好之前折腾过Django REST API里图片URL带主机名的问题,给你三个靠谱的解决方案,你可以根据自己的场景挑:

方法一:自定义序列化字段(批量处理)

如果你的序列化器里有好几个图片字段,自定义一个专属字段最省事,不用重复写逻辑。

先在你的序列化器文件里写这个自定义字段:

from rest_framework import serializers

class RelativeImageField(serializers.ImageField):
    def to_representation(self, value):
        # value是ImageField对象,value.url是带主机的完整URL
        # 截取主机后面的部分,得到相对路径
        if value and hasattr(value, 'url'):
            # 结果会是 media/img/xxx.png 这类格式
            return value.url.split('://')[-1].split('/', 1)[-1]
        # 没有图片时返回默认值
        return super().to_representation(value)

然后在序列化器里用这个字段替换原来的serializers.ImageField():

class CategorySerializer(serializers.ModelSerializer):
    category_image = RelativeImageField()

    class Meta:
        model = Category
        fields = ['id', 'category_image', ...]

如果你连media/前缀都想去掉,直接返回value.name就行——这就是你在模型里定义的上传路径(比如img/thumbnailCategory/ct/1.png)。

方法二:用SerializerMethodField(灵活处理单个字段)

如果只是个别字段需要修改,用这个方法最灵活,想怎么调整就怎么调整:

class FoodSerializer(serializers.ModelSerializer):
    food_t_image = serializers.SerializerMethodField()

    def get_food_t_image(self, obj):
        if obj.food_t_image:
            # 直接返回不带主机的相对路径
            return obj.food_t_image.url.split('://')[-1].split('/', 1)[-1]
            # 要纯上传路径的话就改成:return obj.food_t_image.name
        return None

    class Meta:
        model = Food
        fields = ['id', 'food_t_image', ...]

这个方法的好处是可以给不同字段写不同逻辑,比如某张图要加特定前缀、某张图要做格式转换,都能单独处理。

方法三:全局修改配置(所有图片生效)

如果想让所有图片URL都自动返回相对路径,不用改序列化器的任何代码,直接修改settings.py:

# settings.py
MEDIA_URL = '/media/'  # 这里不要加主机名,保持相对路径格式

# 开发环境下记得配置静态文件服务,在urls.py里加以下代码:
# from django.conf import settings
# from django.conf.urls.static import static
# urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

这样Django生成的所有图片URL都会是/media/img/xxx.png的格式,不带主机名。不过生产环境要注意,得用Nginx或Apache把/media/路径映射到你的MEDIA_ROOT目录,确保图片能正常访问。

内容的提问来源于stack exchange,提问作者shahab

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:00:09