Static Files
- 정적 파일
- 서버 측에서 변경되지 않고 긍정적으로 제공되는 파일(이미지, JS, CSS 파일 등)
웹 서버와 정적 파일
- 웹 서버의 기본동작은 특정 위치(URL)에 있는 자원을 요청(HTTP request) 받아서 응답(HTTP response)을 처리하고 제공하는 것
- 이는 "자원에 접근 가능한 주소가 있다."라는 의미
- 웹 서버는 요청 받은 URL로 서버에 존재하는 정적 자원을 제공함
정적 파일을 제공하기 위한 경로(URL)가 있어야 함
Static files 제공하기
(templates 제공과 유사)
1. 기본 경로에서 제공하기
articles/static/articles/
- 추가 경로에서 제공하기
- STATICFILES_DIRS에 문자열 값으로 추가 경로 설정
- STATICFILES_DIRS : 정적 파일의 기본 경로 외에 추가적인 경로 목적을 정의하는 리스트
STATIC_URL
-
STATICFILES_DIRS에 문자열 값으로 추가 경로 설정
-
기본 경로 및 추가 경로에 위치한 정적 파일을 참조하기 위한 URL
실제 파일이나 디렉토리가 아니며, URL로만 존재
-
URL + STATIC_URL + 정적파일 경로
-
http://127.0.0.1:8000/static/articles/sample-1.png
미디어 파일 제공을 위한 사전 준비
- settings.py에 MEDIA_ROOT, MEDIA_URL 설정
- 작성한 MEDIA_ROOT와 MEDIA_URL에 대한 url 지정
- 실제 미디어 파일들이 위치하는 디렉토리의 절대 경로
- settings.py
MEDIA_ROOT = BASE_DIR / 'media'
- MEDIA_ROOT에서 제공되는 미디어 파일에 대한 주소를 생성(STATIC_URL과 동일한 역할)
- settings.py
- 업로드 된 파일을 제공하는 URL == settings.MEDIA_URL
- 위 URL을 통해 참조하는 파일의 실제 위치 == settings.MEDIA_ROOT
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
] + static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)
이미지 업로드
- blank=True 속성을 작성해 빈 문자열이 저장될 수 있도록 제약 조건 설정
게시글 작성 시 이미지 없이 작성할 수 있도록
image = models.ImageField(blank=True)
- form 요소의 enctype 속성 추가
enctype="multipart/form-data"
- view 함수에서 업로드 파일에 대한 추가 코드 작성
업로드 이미지 제공하기
- 'url' 속성을 통해 파일의 경로 값을 얻을 수 있음
- article.image.url
- article.image
'upload_to' argument
- ImageField()의 upload_to 인자를 사용해 미디어 파일 추가 경로 설정