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 %}
context 넘기기
Django View와 Context
View
- 클라이언트 요청을 처리하고, 템플릿에 데이터를 전달
Context
- 템플릿에 전달할 데이터를 포함하는 딕셔너리
예 : {"data" : "Hello"}
많은 데이터 넘기기 !
템플릿 필터 사용하기(,로 join + 리스트 길이 구하기)
템플릿 태그 사용하기(반복문)
Template Inheritance
템플릿 상속으로 중복 코드를 제거하고 공통 요소를 재사용
상위 템플릿에서 공통 부분을 정의하고, 하위 템플릿에서 변경할 부분만 추가
(상위 템플릿 - 공통 부분 정의, 하위 템플릿 - 달라질 부분 블록(Block)으로 만듦 : Skeleton 형태)
최상단 디렉토리에 templates 디렉토리 생성
templates 디렉토리 내에 상위 템플릿 - base.html 파일 생성(공통 부분 정의)
프로젝트 내의 templates - 하위 템플릿 sub.html 파일 생성 (변경 부분 추가)
sub.html 작성
urls.py
views.py
상위에서 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 Built-in Filters
'∟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 |