Django Rest框架,具有简单的缩略图

Django Rest框架,具有简单的缩略图,django,django-rest-framework,easy-thumbnails,Django,Django Rest Framework,Easy Thumbnails,对于普通的ImageField,序列化URL只需image=serializers.ImageField()。当使用简易缩略图时,它应该是什么样子 到目前为止,我只找到了一个获取URL的函数: 在序列化程序中使用它需要SerializerMethodField,这是一个不令人满意的解决方案。我正在寻找一种既实用又高效的解决方案。最好的解决方案可能是将serializers.ImageField()子类化,并使用to_表示法中找到的代码。然后,您的字段可以如下所示: from easy_thumb

对于普通的ImageField,序列化URL只需
image=serializers.ImageField()
。当使用简易缩略图时,它应该是什么样子

到目前为止,我只找到了一个获取URL的函数:
在序列化程序中使用它需要SerializerMethodField,这是一个不令人满意的解决方案。我正在寻找一种既实用又高效的解决方案。

最好的解决方案可能是将
serializers.ImageField()子类化,并使用
to_表示法中找到的代码。然后,您的字段可以如下所示:

from easy_thumbnails.templatetags.thumbnail import thumbnail_url

class ThumbnailSerializer(serializers.ImageField):

    def to_representation(self, instance):
        return thumbnail_url(instance, 'small')
你能做的就是。 第一步。安装sorl缩略图并将其添加到settings.py

pip install sorl-thumbnail 
./manage.py migrate
THUMBNAIL_ALIASES = {
    '': {
        'avatar': {'size': (40, 40)},
        'image': {'size': (128, 128)},
    },
}
第二步。安装sorl缩略图序列化程序字段

pip install sorl-thumbnail-serializer-field
将其添加到settings.py。文件中所述的样本使用()

尚未为sorl缩略图更新Django 3.0兼容性。目前的Django3.0就是这样

pip install -e git+git://github.com/jazzband/sorl-thumbnail@4fe1854#egg=sorl-thumbnail 
设置.py

pip install sorl-thumbnail 
./manage.py migrate
THUMBNAIL_ALIASES = {
    '': {
        'avatar': {'size': (40, 40)},
        'image': {'size': (128, 128)},
    },
}
api/serializers.py

from easy_thumbnails.templatetags.thumbnail import thumbnail_url


class ThumbnailSerializer(serializers.ImageField):
    def __init__(self, alias, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.read_only = True
        self.alias = alias

    def to_representation(self, value):
        if not value:
            return None

        url = thumbnail_url(value, self.alias)
        request = self.context.get('request', None)
        if request is not None:
            return request.build_absolute_uri(url)
        return url
使用


一个简单的程序包,用于序列化easy thumbnailer字段:

请,您能用更详细的解释扩展您的答案吗?链接随时可能过期,所以最好在这里完整描述您的解决方案。非常感谢。通常,链接到工具或库,或者如果可能,链接到上述所有内容。