∟Framework/∟Django

Django - Template System/ Django Template Language(DTL)

최 수빈 2025. 1. 10. 21:30

 

Django Template System

 
 
Template System
 
Django에서 Template은 데이터를 사용자에게 보여주는 역할을 담당
기본적으로 각 앱의 templates 디렉토리 내에 위치하며, Django는 settings.py 파일의 TEMPLATES 설정에서 이 디렉토리를 자동으로 검색
 
 

Django Template Language (DTL)

 
Django의 템플릿에서 사용되는 문법
Python과 유사하지만 실제 Python이 동작하는 것은 아님
 
 
 

변수(Variable)

 
변수의 기본 형태

{{ variable }}
  •  View에서 전달된 context의 데이터를 템플릿에서 접근
  • . 을 사용하여 변수의 속성값에 접근
    {{object.attribute}}

→render()의 세번째 인자인 context에 dict형태로 넘겨진 데이터 중 key값이 template에서 사용 가능한 변수가 됨

def render(
    request: HttpRequest,
    template_name: str | Sequence[str],
    context: Mapping[str, Any] | None = ...,
    content_type: str | None = ...,
    status: int | None = ...,
    using: str | None = ...,
) -> HttpResponse: ...

 
 
필터(Filters)
 
필터의 기본 형태

{{ variable|filter }}
  •  변수의 값을 수정하거나 가공
  • 약 60개의 built-in template filter가 제공되며 일부 필터는 인자를 받기도 함
{{ first_name|lower }} #소문자로 변환

 
 
태그(Tags)
 
태그의 기본 형태

{% tag %}

 
반복문, 조건문 등 제어 흐름을 담당 → 특수한 기능 수행
일부는 시작 태그와 종료 태그가 있음 

{% if ~ %}
{% endif %}
{% if user.is_authenticated %}
<p>Welcome, {{ user.username }}!</p>
{% else %}
<p>Please log in.</p>
{% endif %}

 
 
 
주석(Comments)

{# 한 줄 주석 #}

{% comment %}
여러줄
주석
{% endcomment %}

 
 


 

views.py
urls.py
hello.html

 

/hello/


 

context 넘기기

 
 

views.py
hello.html
/hello/

 

 

 

Django View와 Context

 

View

  • 클라이언트 요청을 처리하고, 템플릿에 데이터를 전달

Context

  • 템플릿에 전달할 데이터를 포함하는 딕셔너리
    예 : {"data" : "Hello"}

 


 

많은 데이터 넘기기 !

 

views.py
hello.html

 

/hello/

 


 

템플릿 필터 사용하기(,로 join + 리스트 길이 구하기)

 

hello.html
/hello/

 

 

템플릿 태그 사용하기(반복문)

 

hello.html
/hello/

 
 

 


Template Inheritance

 
템플릿 상속으로 중복 코드를 제거하고 공통 요소를 재사용
상위 템플릿에서 공통 부분을 정의하고, 하위 템플릿에서 변경할 부분만 추가
(상위 템플릿 - 공통 부분 정의, 하위 템플릿 - 달라질 부분 블록(Block)으로 만듦 : Skeleton 형태)
 
 
 

최상단 디렉토리에 templates 디렉토리 생성

templates

 
templates 디렉토리 내에 상위 템플릿 - base.html 파일 생성(공통 부분 정의)

base.html

 
프로젝트 내의 templates - 하위 템플릿 sub.html 파일 생성 (변경 부분 추가)

sub.html

 
sub.html 작성

sub.html

 
urls.py

urls.py

 
views.py

views.py



/base/

 
 
 
상위에서 head - title은 what's for,
하위에서 body는 for this
라고 해줬고, path url설정해주고 render request해줬더니
진짜로 탭부분은 what's for, body는 for this라고 렌더링 되는걸 확인할 수 있었다.

나는 상속원리를 알고자 위와 같이 작성했으나, 보통 base.html은 HTML기본구조 정의 용으로 쓰는 듯
 
-중복 제거, 코드 관리 용이
 
 

 

커스텀 템플릿 경로

 
프로젝트 전체에서 사용할 공통 템플릿은 프로젝트 최상단에 templates 디렉토리를 생성
settings.py에서 TEMPLATES의 DIRS에 이 경로를 추가

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR / "templates"],  # 공통 경로 추가
        'APP_DIRS': True,
        'OPTIONS': {...},
    },
]

 
 
 

Template 관리 시 고려 사항

템플릿 경로의 통일성
• 공통 템플릿(base.html)은 프로젝트 루트의 templates 디렉토리에 위치
• 앱별 템플릿은 각 앱의 templates 디렉토리에 분리
중복 제거
• 템플릿 상속을 적극 활용
• 공통 요소는 base.html에 정의
확장성 고려
• 새 앱 추가 시 공통 템플릿을 쉽게 사용할 수 있도록 구조 설계
 
 
 


 
 
Django Template System

 

Django documentation | Django documentation

The web framework for perfectionists with deadlines.

docs.djangoproject.com

 
Django Template Built-in Filters

 

Built-in template tags and filters | Django documentation

The web framework for perfectionists with deadlines.

docs.djangoproject.com

 
 
pathlib - 객체 지향 파일 시스템 경로

 

pathlib — 객체 지향 파일 시스템 경로 — Python 3.10.16 문서

pathlib — 객체 지향 파일 시스템 경로 소스 코드: Lib/pathlib.py 이 모듈은 다른 운영 체제에 적합한 의미 체계를 가진 파일 시스템 경로를 나타내는 클래스를 제공합니다. 경로 클래스는 I/O 없이 순

docs.python.org

 
 
 
 

'∟Framework > ∟Django' 카테고리의 다른 글

Django - URLs  (0) 2025.01.14
Django - HTTP Form  (0) 2025.01.12
Django - Template  (0) 2025.01.09
Django - Design Patterns  (0) 2025.01.08
Django - Request & Response  (1) 2025.01.07