블로그 게시글에 텍스트뿐만 아니라 이미지, 동영상 같은 미디어 파일까지 업로드할 수 있도록 해보자.
먼저 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)
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 파일이 없는 경우 에러가 발생한다.