Django Rest框架,具有简单的缩略图
对于普通的ImageField,序列化URL只需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
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字段:请,您能用更详细的解释扩展您的答案吗?链接随时可能过期,所以最好在这里完整描述您的解决方案。非常感谢。通常,链接到工具或库,或者如果可能,链接到上述所有内容。