장고: 미디어 파일 추가하기

박정환·2022년 7월 21일
0

블로그 게시글에 텍스트뿐만 아니라 이미지, 동영상 같은 미디어 파일까지 업로드할 수 있도록 해보자.

먼저 settings.py에 미디어 파일이 저장될 경로와 URL을 추가해주자.

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

유저가 업로드한 미디어 파일이 저장되는 경로
유저가 업로드한 미디어 파일에 접근할 수 있는 경로

path.py에도 미디어 파일 접근 가능 경로를 추가해주자.다음 코드는 그냥 외우자!

from django.conf import settings
from django.confurls.static import static 


urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
  1. post 안에 이미지 파일을 추가하고 싶으므로 post 모델에 photo 객체를 추가해주자. 이때 업로드되던지 안되던지 모두 허용하므로 blank=True, null=True 옵션을 추가해준다. upload_to='post_photo' 옵션은 이미지 파일이 media 폴더 안의 post_photo 디렉토리에 자동으로 저장되게 해준다.

사용자로부터 미디어 파일 입력받기

Form형식으로 미디어 파일을 받을 때 필요한 규칙을 알아보자.

'form' 태그는

enctype=multipart/form_data

특성을 추가로 받아야 한다. (multiport가 아님에 주의!!!!)

multiport/form-data에 대한 설명은 다음 포스트에 상세히 되어 있다.

https://velog.io/@shin6403/HTTP-multipartform-data-%EB%9E%80

미디어 파일이 폼에 입력되면 해당 reqeust의 타입은 POST가 아니라 FILES가 된다.

다음은 디테일 페이지에서 저장된 객체의 이미지 속성을 표시하는 방법이다.

# 틀린 코드  
  {% if blog_detail.photo %}
  	 {{ blog_detail.photo }}
  {% endif %} 
# 맞는 코드 
  {% if blog_detail.photo %}
  		<img src="{{blog_detail.photo.url}}">
  {% endif %} 

if문을 꼭 추가해주어야 하나 생각할 수 있지만 if문을 추가해주지 않으면 photo 파일이 없는 경우 에러가 발생한다.

0개의 댓글