python - 在django rest框架中使用ModelViewSet时如何获取ImageField的相对url?
问题描述
在 Django 休息框架中使用 ModelViewSet 时,我得到了 ImageField 的绝对 URL。当我使用开发服务器时,它返回http://localhost:8000/media/abc.png这对我来说很好。但是当我使用 nginx 服务器时,它返回的http://localhost/media/abc.png是不正确的。如您所见,图像路径中缺少端口。我将如何使用该 ImageField 的 Nginx 服务器的端口返回相对 url 或绝对 URL?
/模型.py
class BlogPost(models.Model):
title_image = models.ImageField(upload_to='blog/title_images/%Y/%m/%d', blank=True, null=True)
/序列化程序.py
class BlogListSerializer(serializers.ModelSerializer):
class Meta:
model = BlogPost
exclude = ('id',)
/views.py
class BlogViewSet(ModelViewSet):
parser_classes = (FormParser, JSONParser, MultiPartParser, )
permission_classes = (AllowAny, )
authentication_classes = (CsrfExemptSessionAuthentication, BasicAuthentication, )
queryset = BlogPost.objects.all()
serializer_class = BlogListSerializer
解决方案
你可以这样做。对于 .env 你安装 python-decouple 包。
class BlogListSerializer(serializers.ModelSerializer):
# Use serializer methodfield to get correct image path
avatar = serializers.SerializerMethodField()
def get_avatar(self, data):
return env('MEDIA_URL') + data['title_image']
class Meta:
model = BlogPost
exclude = ('id','avatar')
推荐阅读
- swift - 使用 FBSDKLoginKit 从仅使用电话号码注册的帐户中检索用户电子邮件:“电子邮件”结果返回什么?
- r - 如何在 R 和 ggplot 中表示具有非常长的轴标签的巨大条形图?
- gremlin - AWS 海王星上的 gremlin 遍历
- node.js - App Engine Flex 启动实例的高延迟和延迟
- xpath - XMLExists 或 ExistsNode:在 FROM 子句中使用两个 XML 引用时在 WHERE 子句中使用
- javascript - 代码游戏:儿童游戏
- firebase - 从 Firestore 获取数据时调用 get() 函数需要多少“读取”
- swift - Swift for Windows 10 print() 命令不打印
- python - Unable to run python Flask decorator in blueprints
- c# - Unable to export RSA private parameters when running as administrator