이제 모델을 활용해서 이미지를 업로드하고, 페이지에 띄워봅시다. 먼저 사용자가 이미지를 업로드 하면 이미지가 저장될 장소부터 만들어 봅시다. 앞서 Django는 static파일을 **개발자가 준비하는 파일(static)**과 이용자들이 올리는 파일(media) 두가지로 구분한다고 했었습니다.
이전 시간에 작성했던 STATIC_ROOT와 STATIC_URL 그대로 복사 붙여넣기 합니다.
그리고 static을 전부 media로 바꿔줍니다.
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
# Django 3.1 이상부터는
# MEDIA_ROOT = Path(BASE_DIR, 'media')
MEDIA_URL = '/media/'
from django.conf import settings
from django.conf.urls.static import static
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urls.py의 내용을 위와 같이 추가합니다. settings
와 static
관련 내용을 import
하고 맨 마지막에 static 관련한 한줄을 추가해줍니다. 그냥 이렇게 해야 올린 이미지를 읽어올수 있구나 생각하면 됩니다.
그럼 이제 사용자가 올린 파일을 저장할 DB를 작성해봅시다.
class Photo(models.Model):
title = models.CharField(max_length=255)
image = models.ImageField(upload_to='images/')
description = models.CharField(max_length=500)
def __str__(self):
return self.title
앞서 만들었던 model과 다른 점이 있다면 이미지를 업로드 한다는 점입니다.
그래서 image
를 살펴보면 **upload_to='images/'**
라는 내용이 있는데 이부분이 업로드된 이미지들을 images 폴더안에 넣으라는 의미입니다.4
위와 같이 모델 구성이 끝났으면 migration을 할 차례입니다.
python manage.py makemigrations
python manage.py migrate
경고창이 뜨면서 Pillow가 설치안됬다고 메세지가 나오면, 그것도 설치해 줍니다.