[Django] Static files [EP 04]

yunhlim·2022년 5월 14일
0

Django 📖

목록 보기
4/6
post-thumbnail

📚 Static files

  • 정적 파일

  • 응답할 때 별도의 처리 없이 파일 내용을 그대로 보여주면 되는 파일

  • 사용자의 요청에 따라 내용이 바뀌는 것이 아니라 요청한 것을 그대로 보여주는 파일

  • 예를 들어, 웹 사이트는 일반적으로 이미지, 자바 스크립트 또는 CSS와 같은 미리 준비된 추가 파일(움직이지 않는)을 제공해야 함

  • Django에서는 이러한 파일들을 “static file”이라 함

Django template tag

  • load
    • 사용자 정의 템플릿 태그 세트를 로드
    • 로드하는 라이브러리, 패키지에 등록된 모든 태그와 필터를 로드
  • static
    • STATIC_ROOT에 저장된 정적 파일에 연결

Static files 사용

  1. django.contrib.staticfiles 앱이 INSTALLED_APPS에 있는지 확인

  2. setting.py에 STATIC_URL 정의 (기본으로 정의되어 있음)

    STATIC_URL = '/static/'
    • STATIC_ROOT에 있는 정적 파일을 참조 할 때 사용할 URL
    • 개발 단계에서는 실제 정적 파일들이 저장되어 있는 app/static/ 경로 (기본 경로) 및STATICFILES_DIRS에 정의된 추가 경로들을 탐색함(아래에 작성)
    • 실제 파일이나 디렉토리가 아니며, URL로만 존재 비어 있지 않은 값으로 설정 한다면 반드시 slash(/)로 끝나야 함
  3. 템플릿에서 static 템플릿 태그를 사용하여 static file이 있는 상대경로를 빌드

  4. 앱에 static file 저장하기 (my_app/static/my_app/sample.jpg)

  • 예시

    • article/static/articles/ 경로에 이미지 파일 위치

      <!-- articles/index.html -->
      
      {% extends 'base.html' %}
      {% load static %}
      
      {% block content %}
        <img src="{% static 'articles/sample.png' %}" alt="sample">
        ...
      {% endblock %}
    • 이미지 파일 위치 - articles/static/articles/images/

    • static file 기본 경로

      • app_name/static/

🚆 추가 경로 지정하기

  • STATICFILES_DIRS

    • app/static/ 디렉토리 경로를 사용하는 것(기본 경로) 외에 추가적인 정적 파일 경로 목록을 정의하는 리스트

    • 추가 파일 디렉토리에 대한 전체 경로를 포함하는 문자열 목록으로 작성되어야 함

  • 예시

    • static/ 경로에 CSS 파일 위치
<!-- base.html -->

<head>
  {% block css %}{% endblock %}
</head>
# settings.py

STATICFILES_DIRS = [
    BASE_DIR / 'static',
]
<!-- articles/index.html -->

{% extends 'base.html' %}
{% load static %}

{% block css %}
  <link rel="stylesheet" href="{% static 'style.css' %}">
{% endblock %}
/* static/style.css */

h1 {
    color: crimson;
}

🏠 STATIC_ROOT

  • collectstatic이 배포를 위해 정적 파일을 수집하는 디렉토리의 절대 경로
  • django 프로젝트에서 사용하는 모든 정적 파일을 한 곳에 모아 넣는 경로
  • 개발 과정에서 setting.py의 DEBUG 값이 True로 설정되어 있으면 해당 값은 작용되지 않음
  • 직접 작성하지 않으면 django 프로젝트에서는 setting.py에 작성되어 있지 않음
  • 실 서비스 환경(배포 환경)에서 django의 모든 정적 파일을 다른 웹 서버가 직접 제공하기 위함

[참고] collectstatic

  • 프로젝트 배포 시 흩어져있는 정적 파일들을 모아 특정 디렉토리로 옮기는 작업
# settings.py 예시

STATIC_ROOT = BASE_DIR / 'staticfiles'
$ python manage.py collectstatic
profile
very very passionate developer

0개의 댓글