본문 바로가기
Web/Django, Bootstrap

[Blog 만들기] #5 블로그 포스트 미디어 파일 넣기

by 파크영 2022. 4. 8.

※ Do it! 장고 + 부트스트랩 파이썬 웹 개발의 정석(이성용, 김태곤 / 이지스퍼블리싱) 책을 참고하여 프로젝트를 진행하고 있습니다.

프로젝트 진행과정을 기록하기 위해 작성하고 있으므로 책 저작권을 위해서 간단한 내용 외 자세한 코드와 내용은 작성하지 않습니다.

 

 

미디어 파일 저장하기

 

  • 프로젝트파일/settings.py

도메인 뒤에 /media/라는 경로가 따라오면 미디어 파일을 사용하겠다는 의미

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

 

  • 프로젝트파일/urls.py

urls.py에서 media URL에 대한 설정을 추가해야 한다. 

from django.conf import settings
from django.conf.urls.static import static

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

 

 

  • blog/models.py
from django.db import models

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)
    file_upload = models.FileField(upload_to='blog/files/%Y/%m/%d/', blank=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

 

 

 - 대표 이미지 업로드

게시물에서 대표 사진을 저장하면 blog/images/%Y/%m/%d/ 위치에 저장된다.  (현재 날짜 파일)

blank = True : 해당 필드는 필수 항목은 아니라는 의미

    head_image = models.ImageField(upload_to='blog/images/%Y/%m/%d/', blank=True)

 

- 파일 업로드 

게시물에서 미디어 파일을 저장하면 blog/files/%Y/%m/%d/ 위치에 저장된다. (현재 날짜 파일)

file_upload = models.FileField(upload_to='blog/files/%Y/%m/%d/', blank=True)

 

 

 

 

 

위의 사진을 보면 파일 선택한 후 저장하면 현재 날짜 파일에 이미지와 텍스트 파일이 저장된 모습을 확인할 수 있다. 

 

 

 

포스트 목록 페이지에 대표 이미지 출력하기

 

  • blog/templates/blog/post_list
{% for p in post_list %}
<!-- Blog post-->
    <div class="card mb-4">
        <img class="card-img-top" src="{{ p.head_image.url }}" alt="Card image cap" />

 

댓글