장고는 이미지 업로드를 위한 ImageField
를 제공한다.
ImageField
를 사용하려면 사용자가 업로드한 이미지를 어디에 저장할지 먼저 설정하고 업로드된 이미지들이 모여 있는 폴더의 URL을 어떻게 할지도 설정해야 한다.
settings.py 파일로가서 다음 코드를 추가한다.
import os
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, '_media')
이미지 파일은 '_media'라는 이름의 폴더를 만들고 그 안에 저장하도록 설정했다.
그리고 MEDIA_URL
는 /media/로 지정했다. 웹 브라우저에서 도메인 뒤에 /media/라는 경로가 따라오면 미디어 파일을 사용하겠다는 의미다.
그 후 /blog/model.py 파일로 가서
head_image = models.ImageField(upload_to='blog/images/%Y/%m/%d', blank=True)
위 코드를 추가한다.
이는 이미지를 저정할 푤더의 규칙을 지정한 것이다.
blank=True
는 해당 필드는 필수 항목은 아니라는 뜻이 된다. 즉 포스트를 작성할 때 반드시 이미지를 업로드할 필요가 없다.
from django.db import models
# Create your models here.
class Post(models.Model):
title = models.CharField(max_length=30)
content = models.TextField()
head_image = models.ImageField(upload_to='blog/images/%Y/%m/%d', blank=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return f'[{self.pk}] {self.title}'
def get_absolute_url(self):
return f'/blog/{self.pk}'
장고 + 부트스트랩 파이썬 웹 개발의 정석