[Django] Static
작성:    
업데이트:
카테고리: Django
태그: BE Framework, Django
Static files
웹 서버와 정적 파일
- 웹 서버는 특정 위치(URL)에 있는 자원(resource)을 요청(HTTP request) 받아서 제공하는 응답(HTTP response)을 처리하는 것을 기본 동작으로 함
- 이는 자원과 접근 가능한 주소가 정적으로 연결된 관계
- 예를 들어, 사진 파일은 자원이고 파일 경로는 웹 주소
- 즉, 웹 서버는 요청 받은 URL로 서버에 존재하는 정적 자원(static resource) 제공
Static file
- 정적 파일
- 응답할 때 별도의 처리 없이 파일 내용을 보여준다.
- 파일 자체가 고정, 서비스 중에도 추가/변경 없이 고정
- Django에서는 staticfiles 앱을 통해 관련 기능 제공
Static file 구성
- 가. django.contrib.staticfiles가 INSTALLED_APPS에 포함되어 있는지 확인
- 나. settings.py의 STATIC_URL 정의
- 다. 템플릿에서 static 템플릿 태그를 사용하여 지정된 상대경로에 대한 URL을 빌드
{% load static %}
<img src="{% static 'my_app/example.jpg' %}" alt="My image">
- 라. 앱의 static 디렉토리에 정적 파일 저장
- ex) my_app/static/my_app/example.jpg
- templates 때처럼 namespace 지정
STATICFILES_DIRS
- ‘app/static/’ 디렉토리 경로(기본 경로)를 사용하는 것 외에 추가적인 정적 파일 경로 목록을 정의하는 리스트
- 추가 파일 디렉토리에 대한 전체 경로를 포함하는 문자열 목록으로 작성되어야 한다.
- settings.py에 [STATICFILES_DIRS] 을 추가
STATIC_URL
- STATIC_ROOT에 있는 정적 파일을 참조할 때 사용할 URL
- 개발 단계에서는 실제 정적 파일들이 저장되어 있는 ‘app/static/’ 경로(기본 경로) 및 STATICFILES_DIRS에 정의된 추가 경로들을 탐색
- 실제 파일이나 디렉토리가 아니며, URL로만 존재
- 비어 있지 않은 값으로 설정한다면 반드시 slash(/)로 끝나야 한다.
STATIC_URL = '/static/'
STATIC_ROOT
- collectstatic이 배포를 위해 정적 파일을 수집하는 디렉토리의 절대 경로
- django 프로젝트에서 사용하는 모든 정적 파일을 한 곳에 모아 놓는 경로
- 개발 과정에서는 해당 값은 작용되지 않는다.
- 개발 중 DEBUG = True, 배포 중 DEBUG = False
- 직접 작성하지 않으면 django 프로젝트에서는 settings.py에 작성되어 있지 않는다.
- DEBUG 값이 False로 되어 있는 상태에서 배포가 되어야 한다.
- 문제가 있더라도 에러 화면에 내부 코드나 경로 정보가 보이지 않는다.
- 실 서비스 환경(배포 환경)에서 django의 모든 정적 파일을 다른 웹 서버(AWS 등)가 직접 제공하기 위함이다.
collectstatic
- django가 구동될 때 숨겨져있는 정적 파일들을 보여주는 명령어
STATIC_ROOT 작성
STATIC_ROOT = BASE_DIR / 'staticfiles'
BASE_DIR 위치에 ‘staticfiles’ 라는 이름의 폴더로 정적 파일을 모아 보여주겠다.
git bash 명령어
$ python manage.py collectstatic
Django template tag
load
- 사용자 정의 템플릿 태그 세트를 load
- load하는 lib, pkg에 등록된 모든 tag와 filter를 불러온다.
- extends tag 하위에 코드 상단에 위치
- app_name/static/까지 약속이 되어있다.
static
- STAIC_ROOT에 저장된 정적 파일에 연결
{% load static %}
...
<img src="{% static 'my_app/example.jpg; %}" alt="My image">
댓글남기기