4.2 버전을 기반으로 작성하였습니다. “장고 template 설정” 은 어떤 요소들이 있고 어떻게 변경할 수 있는지 공부하여 정리해보았습니다.
장고 template 설정
BACKEND
- 템플릿 엔진은 TEMPLATES 리스트로 조절 가능합니다.
- 내장된 백엔드는 DTL, Jinja2 2가지 입니다.
- django.template.backends.django.DjangoTemplates
- django.template.backends.jinja2.Jinja2
- startproject 명령으로 생성된 settings.py 다음의 값들이 정의됩니다.
TEMPLATES = [
{
"BACKEND": "django.template.backends.django.DjangoTemplates",
"DIRS": [],
"APP_DIRS": True,
"OPTIONS": {
# ... some options here ...
},
},
]
DIRS
- Template이 템플릿 소스 파일을 찾아야 하는 디렉토리 리스트
'DIRS': [BASE_DIR / 'templates'],
을 입력하여 프로젝트 하위의 templates 디렉토리에서도 템플릿을 찾도록 설정
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR / 'templates'],
'APP_DIRS': True,
'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',
],
},
},
]
APP_DIRS
- 엔진이 설치된 **애플리케이션 내에서 템플릿을 찾아야 하는지 여부를 알려줌
- TRUE 이면 각 app 하위의 templates 디렉토리에서 템플릿을 찾음
app에 있는 동일한 template name 처리
여러 app들을 생성하고 각 app들의 Template 사이에 동일한 template가 있다면 어떻게 될까요?
예를 들어 your_app1/hello.html과 your_app2/hello.html 와 같이 hello.html이 2개 존재한다면?
이렇게 된다면 settings.py의 INSTALLED_APPS
의 리스트에서 순서가 빠른 app의 hello.html이 render 됩니다.
그렇게 되면 개발자가 원하던 template이 render가 되지 않을 수 있겠죠?
이런 경우를 막고자 app 디렉토리의 templates 디렉토리 하위에 app이름의 디렉토리를 추가로 만들어 줍니다.
그리고 이 디렉토리에 template 파일들을 담는거죠
기존 : app_name/templates
변경 : app_name/templates/app_name
그리고 이제부터 render함수의 html을 적을 때는 “app_name/template_name.html” 과 같은 형식으로 사용합니다.
그러면 이제부터 동일한 template name이라도 혼동 없이 명확하게 template를 구분할 수 있게 됩니다.
기존 : render(request, “index.html”)
변경 : render(request, “your_app/index.html”)
참고하면 좋은 글
공식 document : https://docs.djangoproject.com/en/4.2/topics/templates/