[컴][웹] Django 에서 static file 설정

장고에서 스태틱 / 장고에서 파일 서비스  /장고로 file service / how to set static file service on djngo

Django 에서 static file 설정

Django 에서 static file 을 설정하는 법은 아래에 잘 나와있다.

여기서 설정(configuratoin) 방법을 정리해 본다. static file 을 serve 하기 위해서는 아래 순서대로 하면 된다. setting 사항들이라 대부분 settings.py 에서 작업할 내용이다.
  1. 먼저, django.contrib.staticfiles 를 settings.py 의 INSTALLED_APPS 에 넣어야 한다.
  2. settings.py에 STATIC_URL 을 추가한다. 이녀석이 어떤 url 인 경우에 static file 을 serve 하는지를 결정하는 것이다. 만약 STATIC_URL을 '/static/' 이라고 설정했다면 http://mydomain.com/static/image.png 를 접근하면 image.png 를 serve 해주는 것이다.
    그런데 여기서 template 에 static 을 사용할 때 직접적으로 static 이라는 경로를 적어줄 수도 있지만, 이것을 아래처럼 static 함수를 이용해서 적을 수 있다.
    {% load staticfiles %}
    {% static "image.png" %}
    이렇게 적으면 내가 STATIC_URL 값을 변경해도 알아서 변환된다. 그리고 이녀석을 이용하면 STATICFILES_STORAGE 세팅을 이용해서 한번에 내 이미지들을 CDN 경로로 변경하는 것도 가능하다.
  3. 이제 자신이 사용할 static file 들은 "자신들의 app"(myapp이라 하자) 안에 myapp/static/ 의 형태로 넣어놓으면 된다.
  4. 위의 myapp/static 경로를 directory 경로를 STATICFILES_DIRS 에 추가하면 된다.
# #### STATIC FILE CONFIGURATION
# See: https://docs.djangoproject.com/en/dev/ref/settings/#static-root
STATIC_ROOT = normpath(join(SITE_ROOT, 'assets'))   # for final deploy

# See: https://docs.djangoproject.com/en/dev/ref/settings/#static-url
STATIC_URL = '/static/'

# See:
# https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#std:setting-STATICFILES_DIRS

STATICFILES_DIRS = (
    normpath(join(SITE_ROOT, 'static')),    # dirs to be searched
)

# See:
# https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#staticfiles-finders
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
# #### END STATIC FILE CONFIGURATION

# #### APP CONFIGURATION
INSTALLED_APPS = (
    # Default Django apps:
    ...
    'django.contrib.staticfiles',

    ...
)

참고로 
 django.contrib.staticfiles 를 사용하면 manage.py runserver 를 사용할 때 DEBUG setting 이 True 로 되어 있다면, 직접접근이 가능해 진다. 그러니까 static file 을 STATICFILES_DIRS 에 추가하고, STATIC_URL로 접근하는 것이 아니라, 현재 directory 구조를 url 에 넣으면 바로 접근할 수 있다. 정확한 이야기는 ref. 1 을 참고하자.

Reference

댓글 없음:

댓글 쓰기