장고 template 설정

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/

Leave a Comment

목차