장고:사진 올리기
편집하기 (부분)
둘러보기로 이동
검색으로 이동
경고:
로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다.
로그인
하거나
계정을 생성하면
편집자가 사용자 이름으로 기록되고, 다른 장점도 있습니다.
스팸 방지 검사입니다. 이것을 입력하지
마세요
!
==django-imagekit== 고용량의 이미지를 올릴 때 이미지 목록에선 이미지 전체가 아닌, 썸네일을 보여주는 편이 경제적이다. 혹은 사진을 흑백사진으로 만든다든가, 용량을 바꾼다든가, 사진의 불필요한 부분을 다듬는다든가 간단한 조작이 필요할 때 사용하는 패키지이다. 기존에 사용하던 이미지 모델이 있더라도 적용하면 /media/CACHE 디렉터리 안에 기존 디렉터리 경로와 같은 형태로 썸네일을 만든다. {| class="wikitable" !과정 !설명 !방법 |- |설치 |사전에 PIL이나 Pillow같은 이미지 조작툴이 설치되어 있어야 한다. django-imagekit과 imagekit은 다르니 혼동하지 않도록 유의. |pip install django-imagekit |- |등록 |settings.py의 app 목록에 등록한다. |INSTALLED_APPS 하위에 'imagekit' 추가 |} 이후. ===모델작성=== 다음 코드는 https://pypi.org/project/django-imagekit/<nowiki/>에서 공개된 코드를 변형한 것이다. {| class="wikitable" !과정 !설명 !방법 |- |모델 |모델작성을 통해 활용하는 게 가장 쉬운 방법. 원본 이미지도 함께 저장한다. 섬네일은 /media/CACHE/ 디렉터리에 저장된다. {| class="wikitable" |+processors 옵션 !옵션 !설명 |- |ResizeToFill |해당 크기에 채워 리사이징.(넘친 부분 잘라 크기 통일) |- |<code>ResizeToFit</code> |해당 크기안에 들어오게 리사이징.(원본비율 유지) |- | | |} |<syntaxhighlight lang="python"> from django.db import models # 기존 모델에서 사용. from imagekit.models import ImageSpecField from imagekit.processors import ResizeToFill class Profile(models.Model): avatar = models.ImageField(upload_to='avatars') avatar_thumbnail = ImageSpecField(source='avatar', # 원본의 위치 지정 processors=[ResizeToFill(100, 50)], # 가로, 세로 순서. format='JPEG', options={'quality': 60}) profile = Profile.objects.all()[0] print(profile.avatar_thumbnail.url) # > /media/CACHE/images/982d5af84cddddfd0fbf70892b4431e4.jpg print(profile.avatar_thumbnail.width) # > 100 </syntaxhighlight> |- |원본 이미지가 필요 없을 때. |서버용량문제를 생각하면 원본이미지는 버리는 편이 좋다. |<syntaxhighlight lang="python"> from django.db import models # 기존 모델에서 사용. from imagekit.models import ProcessedImageField from imagekit.processors import ResizeToFill class Profile(models.Model): avatar_thumbnail = ProcessedImageField(upload_to='avatars', # 올릴 위치 지정. processors=[ResizeToFill(100, 50)], format='JPEG', options={'quality': 60}) </syntaxhighlight> |} ===팁=== 보통 경로를 지정할 때 아래 메서드를 정의해 사용한다.<syntaxhighlight lang="python"> def user_path(self, filename): extention = filename.split('.')[-1] # 파일의 확장자만 추출한다. return '경로/{}/{}.{}'.format(self.user.username, 'profile', extention) </syntaxhighlight> ===탬플릿에서의 사용=== {| class="wikitable" !과정 !설명 !방법 |- |탬플릿에 삽입 |기존 이미지 사용과 동일하다. |<nowiki><img src="{{ 모델.이미지가담김필드명.url }}" /></nowiki> |} ===admin 등록=== <syntaxhighlight lang="python"> from django.contrib import admin from imagekit.admin import AdminThumbnail from .models import Photo class PhotoAdmin(admin.ModelAdmin): list_display = ('__str__', 'admin_thumbnail') admin_thumbnail = AdminThumbnail(image_field='thumbnail') admin.site.register(Photo, PhotoAdmin) </syntaxhighlight> ===이외 사용=== 위에선 이미지 처리를 모델에서 수행했는데, form에서 처리하고 모델에선 일반 이미지 필드를 사용할 수도 있다. 삭제 : 이미지를 수정하면 기존의 이미지는 남아있는 상태에서 새 이미지를 올리게 되는데, 여기에 대한 낭비는 줄여야 하지 않을까??
요약:
학교의 모든 지식. SMwiki에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는
학교의 모든 지식. SMwiki:저작권
문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다.
저작권이 있는 내용을 허가 없이 저장하지 마세요!
취소
편집 도움말
(새 창에서 열림)
둘러보기 메뉴
개인 도구
로그인하지 않음
토론
기여
로그인
이름공간
문서
토론
한국어
보기
읽기
편집
원본 편집
역사 보기
더 보기
검색
둘러보기
대문
최근 바뀜
임의의 문서로
미디어위키 도움말
도구
여기를 가리키는 문서
가리키는 글의 최근 바뀜
특수 문서 목록
문서 정보