수학과의 좌충우돌 프로그래밍

[Django] static 파일 다루기 본문

웹프로그래밍/Django

[Django] static 파일 다루기

ssung.k 2019. 7. 30. 00:58

Static 파일이란?

static 파일이란 js, css, image, font 등과 같이 개발자가 사전에 미리 서버에 저장 해둔 파일들을 말합니다. 정적인 파일들이라고 할 수 있습니다.

 

settings 에서의 설정

  • STATIC_URL

    STATIC_URL = '/static/'
    

    이미 settings 에 위와 같이 설정이 되어있습니다. 이를 통해 각 static 파일에 대한 URL의 고정값을 설정할 수 있습니다. 예시를 들자면 {% static '경로' %} 에 대해서 해당 URL 이 STATIC_URL+'경로' 로 바뀌게 되고 이는 다시'/static/경로' 다음과 같이 바뀌게 되어 참조를 할 수 있습니다.

 

  • STATICFILES_DIRS

    STATICFILES_DIRS = [
        os.path.join(BASE_DIR, 'config', 'static')
    ]
    

    개발자가 추가로 지정을 해주셔야 하는 부분입니다. 프로젝트 전반적으로 사용되는 static 경로가 어딘지 설정합니다. config 내에 static 폴더를 추가로 만들어주었습니다.

    config 가 무엇인가요?

    django-admin startproject 'project 이름'
    

    다음과 같은 명령어로 project 를 생성하면 project 이름 폴더 안에 똑같은 폴더가 또 있어서 혼란을 야기 합니다. 따라서 config 라고 project 를 생성한 후 최상단의 폴더 이름을 바꿈으로서 이를 예방할 수 있습니다.

     

  •  
  • STATIC_ROOT

    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    

    static 파일들은 각자 다른 경로에 나눠져 있습니다. 왜냐하면 프로젝트 전반적으로 사용하는 파일들은 STATICFILES_DIRS 에 담겨 있고, 각자의 app 안에는 app 에서 사용되는 파일들이 따로 모여있습니다. 배포를 하기 위해서는 이들을 하나의 디렉토리에 모아야 하는데 아래 명령어로 한 번에 모을 수 있습니다.

    python manage.py collectstatic
    

    하지만 어디로 모을지는 따로 지정을 해줘야하고 그 경로가 바로 STATIC_ROOT 입니다.

    static 폴더를 따로 만들지 않더라도 지정한 경로에 만들어주고 그 안에 복사하여 담아줍니다.

     

templates 에서 사용

우선 사용하기 위해서 상단에 추가해줘야 할 것이 있습니다. static 을 사용하기 위해 이를 load 해줍니다.

{% load static %}

이후에는 다음과 같이 img, css, js 등 여러 정적 파일들을 불러올 수 있습니다.

{% static 'STATIC_URL 이후의 경로' %}

 

settings 의 경로가 바뀌었을 때

위에 보면 BASE_DIR 가 자주 등장합니다. settings 에서 기본 설정되어 있는 값으로서

import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

다음과 같이 설정되어있습니다. os.path.abspath(__file__) 은 현재 파일의 경로, dirname 은 그 상위 디렉토리를 의미합니다. 즉 settings 의 경로가 그 하위폴더로 바뀌게 된다면 dirname 을 하나 더 추가하는 등 수정이 필요합니다. 그래야 BASE_DIR 를 기본으로 돌아가는 static 설정들이 문제 없이 동작하겠죠?

 

 

Comments