J, J Blog
[Django] django-imagekit 을 사용해 썸네일 만들기 본문
썸네일 만들기
만드는 방법은 세 가지가 있다.
1. 썸네일 이미지만 저장하는 방법
2. 둘 다 저장하는 방법
3. 원본만 저장하는 방법
개인적으로 파일 찌꺼기가 남는게 싫어서 3번째 방법을 사용했다. 원본만 저장하고 템플릿에서 원본파일로부터 썸네일을 처리해 보여주는 방식이다.
이미지를 삭제하거나 변경이 있을 때는 원본 이미지 파일을 삭제하도록 처리했다.
models.py 는 다음과 같다
class MyModel(models.Model):
image = models.ImageField(blank=True, null=True, upload_to='images/my_model/%Y/%m/%d',
default='images/no_image.png', verbose_name='이미지')
@receiver(models.signals.post_delete, sender=MyModel)
def auto_delete_file_on_delete(sender, instance, **kwargs):
"""
Deletes file from filesystem
when corresponding `MediaFile` object is deleted.
"""
if instance.image:
if os.path.isfile(instance.image.path):
os.remove(instance.image.path)
@receiver(models.signals.pre_save, sender=MyModel)
def auto_delete_file_on_change(sender, instance, **kwargs):
"""
Deletes old file from filesystem
when corresponding `MediaFile` object is updated
with new file.
"""
if not instance.pk:
return False
try:
old_file = MyModel.objects.get(pk=instance.pk).image
except MyModel.DoesNotExist:
return False
new_file = instance.image
if old_file:
if not old_file == new_file:
if os.path.isfile(old_file.path):
os.remove(old_file.path)
templates 은 다음과 같다
{% load imagekit %}
{% for object in object_list %}
{% thumbnail "100x100" object.image as thumb %}
<img src="{{ thumb.url }}" alt="" width="{{ thumb.width }}" height="{{ thumb.height }}">
{% endfor %}
다른 방법은 다음 글을 참고하기 바란다
초보몽키님의 블로그 참고
https://wayhome25.github.io/django/2017/05/11/image-thumbnail/
썸네일 만들기 (PILKit, imagekit) ImageSpecField, ProcessedImageField · 초보몽키의 개발공부로그
AskDjango 수업을 듣고 중요한 내용을 정리하였습니다.
wayhome25.github.io
django-imagekit 공식 깃헙
https://github.com/matthewwithanm/django-imagekit
matthewwithanm/django-imagekit
Automated image processing for Django. Currently v4.0 - matthewwithanm/django-imagekit
github.com
'Programming > Django' 카테고리의 다른 글
[Django] login 시 요청했던 페이지로 redirect 하기 (1) | 2020.01.18 |
---|---|
[Django] 템플릿(templates)에서 사용하는 admin url (0) | 2020.01.18 |
[Django] Slug 필드가 중복되어 발생하는 오류(Unique Constraint) (0) | 2020.01.16 |
[Django] admin 페이지로 이동하는 url name (0) | 2020.01.14 |
[Django] django-allauth 커스터마이징하기 (0) | 2020.01.08 |