media 파일
media파일은 유저가 웹에 업로드한 모든 파일을 말한다.
즉, static파일이 우리 서비스가 자체적으로 가진 정적인 파일들을 의미하는
반면 media파일은 유저가 자유롭게 웹에 업로드하고 사용하는 파일이라는 점에서 차이가 있다.
media파일을 사용하는 세팅은 다음과 같다
1. MEDIA_ROOT
- 사용자가 업로드한 파일이 저장되는 디렉토리 경로를 설정
- 이때 주의할 것은 업로드한 파일은 이미지로 DB에 저장되지 않고, 실제 DB에 저장되는 것은 그 파일의 (문자열)경로임
2. MEDIA_URL
- 개발자도구로 확인 가능
#my_first/pjt/settings.py
MEDIA_URL = 'media/'
MEDIA_ROOT = BASE_DIR/'media'
static 파일
이름 그래도 '정적 파일'을 의미하는데, 이는 별도의 로직이 필요하지 않고 별다른 처리없이 클라이언트 (혹은 사용자)에게 보여주기만 하면 되는 파일을 말한다.
개발시에는 각 app별로 static디렉토리를 생성하고, (templates구조와 유사하게) 햄버거 구조로 세팅한 후 각 파일들을 저장한다. 예를 들어 articles이라는 app이 있다면, "articles/static/articles/해당 정적 파일들"의 구조를 사용하는 것이 좋다(django가 권장하는 구조!)
(cf. 개발시에는 각 app별 static 디렉토리와 동시에 config dir와 동일선상의 위치에 (manage.py가 존재하는 선상=BASE DIR) static 디렉토리를 만들어 쓴다)
그리고 개발이 끝나고, 배포하는 단계에서는 이렇게 흩어진 파일들을 모두 모아서 하나의 디렉토리 하에서 제공하게 된다. 이와 관련된 것이 settings.py의 STATIC_ROOT이다.
static 파일을 사용하기 위한 세팅은 다음과 같다
1. STATIC_ROOT
- 배포 과정을 위한 사전 세팅
- 개발단계(DEBUG=True)에서는 동작하지 않음
- 추후 배포시에 프로젝트의 모든 정적파일을 모으기 위한 디렉토리의 절대경로
- STATIC ROOT에 모든 정적 파일을 모으는 명령어
python manage.py collectstatic
2. STATIC_URL
- static 파일을 참조할 때 사용할 url 경로
- config dir의 settings.py에서 STATICFILES_DIRS에 정의하는 경로
- 이는 실제 디렉토리 경로가 아니고, url로만 존재하는 경로이다
#my_first_pjt/settings.py
STATIC_URL = 'static/'
STATICFILES_DIRS = [BASE_DIR/'static']
STATIC_ROOT = BASE_DIR / 'staticfiles'
3. 각 앱별 static 디렉토리 생성 및 정적파일 저장
<app_name>/static/<app_name>
#예시
articles/static/articles/files..
즉, 정리하면 개발 단계에서는 config dir의 settings.py의 STATICFILES_DIRS와 app/static에 정의된 url 경로들을 참조한다.
4. template(html)에서 정적파일 사용
{% load static %} #static에 따옴표 없음 주의
{% static 'file_path' %}
#예시
<link rel="stylesheet" href="{% static 'css/style.css' %}">
'TIL' 카테고리의 다른 글
[TIL 2024. 04. 17] 개인과제 오류 수정 (2) (0) | 2024.04.17 |
---|---|
[TIL 2024 04. 16] 개인과제 오류 수정 (0) | 2024.04.16 |
[TIL 2024. 04. 12] GET과 POST | 장고 모델 폼 사용하기 (0) | 2024.04.12 |
[TIL 2024. 04. 11] Django 프로젝트 순서 정리 (0) | 2024.04.12 |
[TIL 2024. 04. 09] MTV Pattern | DTL 문법 | 상속 (0) | 2024.04.09 |