# Django Static

**정적파일(static files)**&#xB294; 웹 페이지를 렌더링하는데 필요한 추가파일( **CSS, 이미지, JavaScript** )이다.

## 정적 파일 설정

### settings.py

```python
# settings.py

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.1/howto/static-files/

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

프로젝트의 기본 설정 값은 다음과 같다. 일반적으로 **BASE\_DIR** 밑에 static이라는 서브 디렉토리를 만들어서 그 안에 파일들을 넣는다. 여기서 static 파일들을 찾는 경로를 나타내는 **STATICFILES\_DIRS** 변수를 추가 설정해야한다.

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

필요에 따라 각각의 Django App마다 정적 파일을 담는 별도의 static 폴더를 둘 수 있다. 이때도 templates와 마찬가지로 app하위에 static 디렉토리 생성후 app명(`app/static/app`)과 같이 namespace를 명확히 해주는 것이 좋다.

```
static
├── css
│   └── style.css
├── images
└── js
```

### template(.html)

```markup
{% load static %}
<link rel="stylesheet" href=" {% static 'css/style.css' %}" type="text/css">
```

static 파일들을 사용하기 위해서는 템플릿 상단에 \`

`태그를 먼저 명시해준다. 그 후`href="

" `다음과 같이 static tag를 이용하여 해당 리소스를 지정한다. 이때`static/\` 폴더 이후의 경로만 지정한다.

## collectstatic

Django 프로젝트를 deploy할 때, 흩어져있는 정적 파일들을 모아 특정 디렉토리로 옮기는 작업을 할 수 있다.

```bash
$ python manage.py collectstatic
```

collectstatic 명령은 Django 프로젝트와 각 Django App안에 있는 static파일들을 `settings.py`안에 정의되어 있는 `STATIC_ROOT`로 옮기는 작업을 수행한다. (이때 `STATICFILES_DIRS`와 `STATIC_ROOT` 의 경로는 같으면 안된다.)

## 참조

* [정적파일 reference](https://docs.djangoproject.com/ko/2.1/ref/contrib/staticfiles/)
* [Managing static files](https://docs.djangoproject.com/ko/2.1/howto/static-files/)
