如何在 django ListAPIView 中获取文件的相对路径?
How to get the relative path of files in the django ListAPIView?
想要从 API 编辑图像的相对路径:return:
想要“/media/image.jpg
”格式,不是“http://0.0.0.1:8000/media.image.jpg
”returnAPI
对于以下内容,获取完整 URL 即“http://0.0.0.1:8000/media.image.jpg
”格式
class ImageListAPIView(ListAPIView):
serializer_class = QuestionImageSerializer
queryset = QuestionImage.objects.all()
对于以下内容,获得正确输出即:media/image.jpg
格式,这是必需的。
class ImageAPIView(APIView):
def get(self, request, format=None):
QuestionImages = QuestionImage.objects.all()
SerializedData = QuestionImageSerializer(QuestionImages, many=True)
return Response({
'QeustionImages:': SerializedData.data
})
如何return列表API视图的相对路径URL?
尝试将以下内容放入序列化程序中,但无法将图像上传到API。
image = serializers.SerializerMethodField()
def get_image(self, obj):
return obj.image.url
PS:
models.py:
class QuestionImage(models.Model):
image = models.ImageField(upload_to=question_directory_path)
serializers.py:
class QuestionImageSerializer(ModelSerializer):
class Meta:
model = QuestionImage
fields= [
'id',
'image',
]
我假设您在生产中使用 gunicorn 或其他服务器并将其置于 nginx 或 apache 之后。因此,为了从列表视图中获得正确的绝对值 url,您需要在 settings.py
中添加以下内容
USE_X_FORWARDED_HOST = True
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
为了生成绝对 URL django 从请求上下文中找到主机和端口。通过进行上述更改,您指示 Django 使用 X-Forwarded-For header 的值作为主机和端口。
您需要确保无论您使用的是 Nginx 还是 Apache,都应该转发这些 header。
对于 Nginx 和 Apache,您可以在此处找到说明 https://www.nginx.com/resources/wiki/start/topics/examples/likeapache/
想要从 API 编辑图像的相对路径:return:
想要“/media/image.jpg
”格式,不是“http://0.0.0.1:8000/media.image.jpg
”returnAPI
对于以下内容,获取完整 URL 即“http://0.0.0.1:8000/media.image.jpg
”格式
class ImageListAPIView(ListAPIView):
serializer_class = QuestionImageSerializer
queryset = QuestionImage.objects.all()
对于以下内容,获得正确输出即:media/image.jpg
格式,这是必需的。
class ImageAPIView(APIView):
def get(self, request, format=None):
QuestionImages = QuestionImage.objects.all()
SerializedData = QuestionImageSerializer(QuestionImages, many=True)
return Response({
'QeustionImages:': SerializedData.data
})
如何return列表API视图的相对路径URL?
尝试将以下内容放入序列化程序中,但无法将图像上传到API。
image = serializers.SerializerMethodField()
def get_image(self, obj):
return obj.image.url
PS:
models.py:
class QuestionImage(models.Model):
image = models.ImageField(upload_to=question_directory_path)
serializers.py:
class QuestionImageSerializer(ModelSerializer):
class Meta:
model = QuestionImage
fields= [
'id',
'image',
]
我假设您在生产中使用 gunicorn 或其他服务器并将其置于 nginx 或 apache 之后。因此,为了从列表视图中获得正确的绝对值 url,您需要在 settings.py
中添加以下内容USE_X_FORWARDED_HOST = True
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
为了生成绝对 URL django 从请求上下文中找到主机和端口。通过进行上述更改,您指示 Django 使用 X-Forwarded-For header 的值作为主机和端口。
您需要确保无论您使用的是 Nginx 还是 Apache,都应该转发这些 header。 对于 Nginx 和 Apache,您可以在此处找到说明 https://www.nginx.com/resources/wiki/start/topics/examples/likeapache/