Django static file, 관리와 배포(deployment)

정현우·2021년 10월 22일
4

Django Basic to Advanced

목록 보기
14/38

튜토리얼 이어서

  • 6장을 보고 7장을 이어가길 바란다. 공식 문서 튜토리얼에 내 입맛과 부족한 정보를 담아서 정리하는 것에 가깝다.

HTML을 제외하고, 웹 어플리케이션은 일반적으로 전체 웹 페이지를 렌더링하는 데 필요한 추가 파일 — 예:이미지, JavaScript 또는 CSS — 을 제공해야합니다. Django에서는 이러한 파일을 《정적 파일》 이라고 부릅니다.

  • "django.contrib.staticfiles"의 목적: 이것은 각 응용 프로그램(및 여러분이 지정한 다른 위치)의 정적 파일들을 프로덕션 환경에서 쉽게 제공 할 수있는 단일 위치로 수집합니다. -> project settings에서 INSTALLED_APPS를 보면 해당 APP이 기본으로 추가되어 있다. 존재 이유!

정적인 파일 이용

  • static의 활용하는 방법에 대한 공식문서 참조

  • polls 디렉토리에 static 디렉토리를 만듭니다. polls/templates/ 안의 템플릿을 찾는 것과 비슷하게 정적 파일을 찾습니다.

static file namespace

  • 방금 만든 정적 디렉토리 내에 polls이라는 다른 디렉토리를 만들고 그 안에 style.css라는 파일을 만듭니다. 즉, 스타일시트는 polls/static/polls/style.css에 있어야 합니다. -> 우리가 템플릿 만들때 했던 이유와 방식이 동일

  • AppDirectoriesFinder 정적 파일 검색기가 작동하는 방식 때문에 템플릿 경로를 참조하는 방식과 유사하게 Django에 있는 이 정적 파일을 polls/style.css로 참조할 수 있습니다.

  • Django의 STATICFILES_FINDERS 설정은 다양한 소스에서 정적 파일을 찾는 방법을 알고 있는 파인더 목록을 가지고 있습니다. 기본값 중 하나는 AppDirectoriesFinder 인데, INSTALLED_APPS 에서 《정적》 하위 디렉토리를 찾습니다, 방금 생성 한 polls 의 경우입니다. 관리 사이트는 정적 파일에 대해 동일한 디렉토리 구조를 사용합니다.

file create

style sheet

  • polls/static/polls/style.css에 아무 css나 넣어보자.
li a {
    color: green;
}
  • 해당 css (static 파일)을 templates에서 불러와야한다. polls/templates/polls/index.html에서 가져와보자. 일반적으로 <link href="main.css" rel="stylesheet">와 같이 사용한다. 우린 그 '경로'를 하드코딩하지 않고, 변수값을 이용해 할당할 것 이다.
{% load static %}
... <!-- 생략 -->
<link rel="stylesheet" type="text/css" href="{% static 'polls/style.css' %}">
... <!-- 생략 -->
  • 위와 같은 형태로 stylesheet를 import할 수 있다. 일반적으로 load static의 위치는 주로 바로 하단에 두는 것 같다. 그리고 {% static %} 템플릿 태그는 정적 파일의 절대 URL을 생성한다.

image

  • 다음으로, 이미지 용 하위 디렉토리를 만듭니다. polls/static/polls/ 디렉토리에 images 서브 디렉토리를 만듭니다. 이 디렉토리 안에 background.gif라는 이미지를 넣으십시오. 즉, 이미지를 polls/static/polls/images/background.gif에 넣으십시오.

  • 그런 다음, 스타일 시트(polls/static/polls/style.css)에 다음을 추가하세요.

/* polls/static/polls/style.css */
body {
    background: white url("images/background.png") no-repeat;
}
  • 스타일시트와 같이 Django에서 생성되지 않은 정적 파일에는 {% static %} 템플릿 태그를 사용할 수 없습니다. 정적 파일의 여러 경로를 수정할 필요 없이 정적 템플릿 태그에서 URL을 생성하는 데 사용되는 STATIC_URL을 변경할 수 있으므로 항상 상대 경로를 사용하여 정적 파일을 서로 연결해야 합니다.

정적 파일 관리하기

  • project settings에 아래와 같은 설정값이 static파일을 찾게 해준다. 그리고 project에서 setting하기때문에 이름-디렉토리 경로 규칙이 있는 것이다. 절대 올바른 파일을 찾을 수 있게, 혼동하지 않게 하기 위헤서다!
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.2/howto/static-files/

STATIC_URL = '/static/'
  • 프로젝트에 특정 앱에 연결되지 않은 정적 자산도 있을 수 있습니다. 앱 내에서 《static/》 디렉토리를 사용하는 것 외에도 디렉토리 목록(:seting:》)을 정의할 수 있습니다.Django가 정적 파일도 찾을 수 있는 설정 파일의 STATICFILES_DIRS)입니다. 예를 들어 다음과 같습니다.
STATICFILES_DIRS = [
    BASE_DIR / "static",
    '/var/www/static/',
]

static file deploy

  • 핵심은 이거다. static file을 배포할때 '어떻게' 포함시켜야 하는가!

  • 정적 파일을 프로덕션에 넣는 기본 개요는 두 단계로 구성됩니다. 정적 파일이 변경될 때 :djadmin:〉collectstatic〉 명령을 실행한 다음 수집된 정적 파일 디렉토리(:seting:〉).STATIC_ROOT〉)를 정적 파일 서버로 이동하여 제공합니다. 설정에 따라 달라집니다.STATICFILES_STORY’에서 파일을 수동으로 새 위치로 이동하거나 :func:〉post_process <django.contrib.staticfiles.staticfiles.storage로 이동해야 할 수 있습니다. 정적 파일 저장소입니다.

  • 튜토리얼이 아닌, 뒤에 이어지는 시리즈에 대해 '스토리지(S3와 같은)'와 연결 지은 static file depoly에 대해 자세하게 작성할 것이다!


추가 참고 자료

profile
도메인 중심의 개발, 깊이의 가치를 이해하고 “문제 해결” 에 몰두하는 개발자가 되고싶습니다. 그러기 위해 항상 새로운 것에 도전하고 노력하는 개발자가 되고 싶습니다!

0개의 댓글