如何在Django Admin站点中通过ImageKit调整显示图片的缩略图尺寸?
实现自定义尺寸Admin缩略图方案
你可以通过以下两种方式实现需求,按需选择即可:
方式一:在模型层预定义缩略图规格(推荐,复用性强)
- 首先在你的
Client模型所属的models.py文件中引入ImageKit相关依赖,新增自定义规格的缩略图字段:
from django.db import models from imagekit.models import ImageSpecField from imagekit.processors import ResizeToFill # 也可替换为ResizeToFit等其他处理器 class Client(models.Model): # 原有字段保持不变 title = models.CharField(max_length=200) logo = models.ImageField(upload_to="client_logos/") # 新增自定义规格缩略图字段,无需单独同步数据库 admin_logo_thumb = ImageSpecField( source="logo", # 绑定原图片字段 processors=[ResizeToFill(120, 80)], # 自定义尺寸,按需修改宽高数值即可 format="PNG", # 可根据需求改为JPEG等格式 options={"quality": 90} )
- 修改Admin配置,将缩略图绑定到你新定义的规格字段:
@admin.register(Client) class ClientAdmin(admin.ModelAdmin): list_display = ['title', 'client_logo', ] client_logo = AdminThumbnail(image_field='admin_logo_thumb') client_logo.short_description = 'Logo' readonly_fields = ['client_logo']
方式二:在Admin层直接生成(无需修改模型,更灵活)
如果不想改动模型代码,也可以直接在Admin类中自定义方法实现缩略图生成:
from django.utils.html import format_html from imagekit.processors import ResizeToFit from imagekit.cachefiles import ImageCacheFile @admin.register(Client) class ClientAdmin(admin.ModelAdmin): list_display = ['title', 'client_logo', ] readonly_fields = ['client_logo'] def client_logo(self, obj): if not obj.logo: return "-" # 直接指定处理器和尺寸,按需修改宽高数值即可 processor = ResizeToFit(150, 100) processed_img = ImageCacheFile(processor.process(obj.logo)) processed_img.generate() return format_html('<img src="{}" alt="客户端Logo">', processed_img.url) client_logo.short_description = 'Logo'
注:ResizeToFill是裁切图片填满指定尺寸,ResizeToFit是等比缩放适配不裁切,可根据业务需求选择对应处理器。
内容的提问来源于stack exchange,提问作者Omid Shojaee
相关产品推荐
相关产品推荐

