기능을 사용하는 것만 배워보자!
그런데, 왜 이걸 굳이 배워야 할까??
static이나 media로 올려주면 되지 않을까??
섬네일 기능을 사용하면 좋은 점
- 썸네일 파일 지정이 용이하다.
- 파일의 용량관리가 용이하다.
- 파일 분류에 효율적이다. (섬네일은 섬네일 끼리)
사전작업
models.py 에 클래스를 만들어주자.
# goologin.models.py from django.db import models class Blog(models.Model): text = models.TextField() image = models.ImageField(upload_to = "blogimg")
장고한테 알려줘야 하니, migrate해주자.
$ python manage.py makemigrates $ python manage.py migrate
media 파일을 사용할 것이다.
기억이 안나면, Media file 여기서 공부하도록 하자!
settings.py
# settings.py STATIC_URL = '/static/' MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
urls.py
로 가서,# urls.py from django.conf import settings from django.conf.urls.static import static urlpatterns = [ path('admin/', admin.site.urls), path('', goologin.views.home, name = "home"), path('accounts/', include('allauth.urls')), ] + static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)
위의 두녀석을 가져오고, 추가적 함수를 url에 더해주자.
가져와야 사용할 수 있다.
admin.py
에서 이녀석을 관리해줄거니까, 등록해주고,# admin.py from django.contrib import admin from .models import Blog admin.site.register(Blog)
views.py
안에다가는,# views.py from django.shortcuts import render def home(request): blog = Blog.objects return render(request, 'home.html') # Create your views here.
모델 객체를 받아준다.
home.html
에는, 마지막에 블로그 객체를 표현해야하니,<!-- home.html --> {% for blog in blog.all %} <img src="{{blog.image.url}}" width = 500> <br> {{blog.text}} {% endfor %}
실습
먼저, pip 패키지를 받아주자.
엄청 여러개가 있는데, 그중에서
$ pip install pillow django-imagekit
를 다운받자.
새로운 앱이 설치가 되었으니,
앱을
settings.py
에 추가해주자.# INSTALLED_APPS = [ # allauth 'allauth', 'allauth.account', 'allauth.socialaccount', # provider 구글, 페이스북, 카톡, 깃헙 'allauth.socialaccount.providers.google', # imagekit 'imagekit' ]
models.py
에 가서 임포트해오자.# models.py from django.db import models from imagekit.models import ImageSpecField ### 이것 from imagekit.processors import ResizeToFill ### 이것 class Blog(models.Model): text = models.TextField() image = models.ImageField(upload_to = "blogimg") # Create your models here.
첫번째는, 이 함수를 사용해서 썸네일을 만드는 것
두번째는, 이 걸 사용해서 크기조절을 쉽게 할 수 있다.
이제 섬네일에 해당하는 변수를 만들자.
# models.py from django.db import models from imagekit.models import ImageSpecField from imagekit.processors import ResizeToFill class Blog(models.Model): text = models.TextField() image = models.ImageField(upload_to = "blogimg") image_thumbnail = ImageSpecField(source = 'image', processors = [ResizeToFill(120, 60)]) # Create your models here.
image_thumbnail
이라는 변수에는ImageSpecField
라는 함수를 통해 나온 결과값을 넣는데,어떤 이미지 소스를 지정하겠냐,
image
라는 녀석!그리고 어떻게 처리할거냐?
ResizeToFill(120, 60)
120 * 60 크기로!이제 이녀석을
home.html
에서 띄워주도록만 만들어주면 된다.<!-- home.html --> {% for blog in blog.all %} <img src="{{blog.image.url}}" width = 500> <br> {{blog.text}} <br><br> <img src = "{{blog.image_thumbnail.url}}"> ### 이렇게 써주자! {% endfor %}
인자로
alt = "대체할 파일 경로"
써주면 좋다.서버돌리고
/admin
으로 들어가자.가서
Blog
객체를 만들어주자.그러면,
사이즈 조절하면 잘 돌아간당.
이제 다른
ImageSpecField
의 인자소개를 하고 끝내자.# models.py image_thumbnail = ImageSpecField(source = 'image', processors = [ResizeToFill(120, 60)], format = 'JPEG', options = {'quality':60})
포맷은 파일의 형식을 정해주는 것이고,
옵션은 파일의 퀄리티를 정해줄 수 있다.
디테일한 인자는 구글링을 해보자!!