๐[Django] settings.py ํํค์น๊ธฐ 1 - TEMPLATES
settings.py ํํค์น๊ธฐ 1 - TEMPLATES
ํ ํ๋ฆฟ ํ์ผ์ ์ฐพ๋ ๋ฐฉ์?
django์์ templates ํ์ผ์ ์ด๋ป๊ฒ ์ฐพ๊ณ , ๋ ๋๋งํ๋์ง ๋์ ๋ฐฉ์์ ์ ๋๋ก ์๊ณ ์๋?
์ผ๋จ ๋ ์๋์ผ๋ก ์ฐพ์์ค๋ค. ๋ผ๊ณ ๋ฐ์ ๋๋ต์ ํ ์ ์์๋ค.
์ด์ ๋ํด django ๊ณต์๋ฌธ์ ์ ChatGPT๋ฅผ ํ์ฉํ์ฌ ์์๋ณด๊ณ ์ ํ๋ค.
๊ณต์ ๋ฌธ์
TEMPLATES = [
{
"BACKEND": "django.template.backends.django.DjangoTemplates",
"DIRS": [],
"APP_DIRS": True,
"OPTIONS": {
# ... some options here ...
},
},
]
๊ตฌ์ฑ ์์
- BACKEND
- Django์ ํ ํ๋ฆฟ ๋ฐฑ์๋ API๋ฅผ ๊ตฌํํ๋ ํ ํ๋ฆฟ ์์ง ํด๋์ค๋ก ๊ฐ๋ ํ์ด์ฌ ๊ฒฝ๋ก๋ฅผ ๋งํ๋ค.
- ๋ด์ฅ ๋ฐฑ์๋๋ก๋ ๋ค์ 2๊ฐ์ง๊ฐ ์๋ค.
- Django์์ ์ ๊ณตํ์ง ์๋ ํ
ํ๋ฆฟ ์์ง์ ์ฌ์ฉํ๋ ค๋ฉด
BACKEND
๋ฅผ ์์ ํ ์ ๊ทํ๋ ๊ฒฝ๋ก๋ก ์ค์ ํด์ผ ํ๋ค.- ์: โmypackage.whatever.Backendโ
- DIRS
- ๊ธฐ๋ณธ ๊ฐ: [] (๋น ๋ชฉ๋ก)
- ์์ง์ด ํ ํ๋ฆฟ ์์ค ํ์ผ์ ์ฐพ์์ผ ํ๋ ๋๋ ํ ๋ฆฌ(๊ฒ์ ์์)๋ฅผ ๋ปํ๋ค.
- APP_DIRS
- ๊ธฐ๋ณธ ๊ฐ: False
- ์์ง์ด ์ค์น๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ด๋ถ์์ ํ ํ๋ฆฟ ์์ค ํ์ผ์ ์ฐพ์์ผ ํ๋์ง ์ฌ๋ถ๋ฅผ ์๋ฏธํ๋ค.
- ํ์ง๋ง,
django-admin startproject
๋ช ๋ น์ด๋ฅผ ํตํด ๋ง๋ django ํ๋ก์ ํธ๋ ๊ธฐ๋ณธ ๊ฐ์ดTrue
์ด๋ค.
- OPTIONS
- ๊ธฐ๋ณธ ๊ฐ: {} (๋น ์ฌ์ )
- ํ ํ๋ฆฟ ๋ฐฑ์๋์ ์ ๋ฌํ ์ถ๊ฐ ๋งค๊ฐ๋ณ์์ด๋ค.
- ์ฌ์ฉ ๊ฐ๋ฅํ ๋งค๊ฐ๋ณ์๋ ํ ํ๋ฆฟ ์์ง์ ๋ฐ๋ผ ๋ค๋ฅด๋ค.
- ๋ด์ฅ ํ
ํ๋ฆฟ ๋ฐฑ์๋(์์ง)์ ์ต์
์ [
DjangoTemplates
](https://docs.djangoproject.com/en/5.1/topics/templates/#django.template.backends.django.DjangoTemplates) ์Jinja2
๋ฅผ ์ฐธ์กฐํ ์ ์๋ค.
ChatGPT์ ๋ต๋ณ
# settings.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates', # ํ
ํ๋ฆฟ ์์ง ์ง์
'DIRS': [os.path.join(BASE_DIR, 'templates')], # ํ
ํ๋ฆฟ ๋๋ ํ ๋ฆฌ ์ง์
'APP_DIRS': True, # ๊ฐ ์ฑ์ 'templates' ๋๋ ํ ๋ฆฌ์์ ํ
ํ๋ฆฟ์ ์๋์ผ๋ก ์ฐพ์
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
๊ตฌ์ฑ ์์
- BACKEND
BACKEND
๋ Django์์ ์ฌ์ฉํ ํ ํ๋ฆฟ ์์ง์ ์ง์ ํ๋ค.- ๊ธฐ๋ณธ์ ์ผ๋ก๋
'django.template.backends.django.DjangoTemplates'
๋ฅผ ์ฌ์ฉํ๋ฉฐ, ํ์์ ๋ฐ๋ผJinja2
์ ๊ฐ์ ๋ค๋ฅธ ํ ํ๋ฆฟ ์์ง์ ์ง์ ํ ์ ์๋ค.
- DIRS
DIRS
๋ ํ ํ๋ฆฟ์ ์ฐพ์ ๋๋ ํ ๋ฆฌ์ ๋ชฉ๋ก์ ์ง์ ํ๋ค.- ์ด ๋๋ ํ ๋ฆฌ๋ค์ Django๊ฐ ํ ํ๋ฆฟ์ ๊ฒ์ํ ๋ ์ฐ์ ์ ์ผ๋ก ์ฐธ์กฐํ๋ค.
DIRS
์os.path.join(BASE_DIR, 'templates')
๊ฐ ์ค์ ๋์ด ์์ผ๋ฉด, Django๋BASE_DIR/templates/
๊ฒฝ๋ก์์ ํ ํ๋ฆฟ์ ์ฐพ๋๋ค๋ ์๋ฏธ์ด๋ค.
- APP_DIRS
APP_DIRS = True
๋ก ์ค์ ๋์ด ์๋ค๋ฉด, Django๋ ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ํด๋ ๋ด์templates
๋๋ ํ ๋ฆฌ์์ ์๋์ผ๋ก ํ ํ๋ฆฟ์ ์ฐพ๋๋ค.- ์ด ์ค์ ์ด ํ์ฑํ๋๋ฉด
DIRS
์ ๋ช ์๋ ๋๋ ํ ๋ฆฌ๋ณด๋ค ์ฐ์ ์์๊ฐ ๋ฎ๋ค.
- OPTIONS
OPTIONS
๋ ํ ํ๋ฆฟ ์์ง์ ๋ํ ์ถ๊ฐ ์ค์ ์ ์ ์ํ๋ ๋ถ๋ถ์ด๋ค.'contetxt_processors'
,'loaders'
,'string_if_invaild'
,'debug'
๋ฑ๊ณผ ๊ฐ์ ์ต์ ์ด ํฌํจ๋ ์ ์๋ค.- ํนํ
'context_processors'
๋ ํ ํ๋ฆฟ ๋ ๋๋ง ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ปจํ ์คํธ์ ์ถ๊ฐ๋๋ ๋ณ์๋ฅผ ์ ์ํ๋ค. ์๋ฅผ ๋ค์ดrequest
๊ฐ์ฒด๋user
๊ฐ์ฒด๋ฅผ ์๋์ผ๋ก ํ ํ๋ฆฟ์ ์ถ๊ฐํ๋ ์ญํ ์ด๋ค.
ํ ํ๋ฆฟ ๋ก๋ฉ์ ๋์ ๋ฐฉ์
- ํ
ํ๋ฆฟ ๊ฒฝ๋ก ์ค์
- Django๋ ๋จผ์
TEMPLATES
์ค์ ์ ์ฐพ๊ณ , ๊ทธ ์์DIRS
์ ์ ์๋ ๋๋ ํ ๋ฆฌ ๋ชฉ๋ก์์ ํ ํ๋ฆฟ์ ์ฐพ๋๋ค. DIRS
์์ ํ ํ๋ฆฟ์ ์ฐพ์ง ๋ชปํ๋ฉด, ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์templates
๋๋ ํ ๋ฆฌ์์ ํ ํ๋ฆฟ์ ์ฐพ๋๋ค. (APP_DIRS=True
์ธ ๊ฒฝ์ฐ)
- Django๋ ๋จผ์
- ํ
ํ๋ฆฟ ์์ง ์ฒ๋ฆฌ
- ํ
ํ๋ฆฟ์ ์ฐพ์๋ค๋ฉด, Django๋
BACKEND
์ ์ ์๋ ํ ํ๋ฆฟ ์์ง์ ์ฌ์ฉํด ํ ํ๋ฆฟ์ ๋ก๋ฉ ๋ฐ ํ์ฑํ๋ค. - ๋ก๋ฉ๋ ํ
ํ๋ฆฟ์
render
๋ฉ์๋๋ฅผ ํตํด ์ปจํ ์คํธ์ ํจ๊ป ๋ ๋๋ง๋๋ฉฐ, ์ต์ข HTML์ด ์์ฑ๋๋ค.
- ํ
ํ๋ฆฟ์ ์ฐพ์๋ค๋ฉด, Django๋
- ์์ธ ์ฒ๋ฆฌ
- ์ง์ ๋ ๊ฒฝ๋ก์์ ํ
ํ๋ฆฟ์ ์ฐพ์ง ๋ชปํ๋ฉด
TemplateDoesNotExist
์์ธ๋ฅผ ๋ฐ์์ํจ๋ค.
- ์ง์ ๋ ๊ฒฝ๋ก์์ ํ
ํ๋ฆฟ์ ์ฐพ์ง ๋ชปํ๋ฉด
๋๊ธ๋จ๊ธฐ๊ธฐ