Django는 파이썬으로 작성된 웹 프레임워크로, 빠른 개발과 심플한 디자인을 특징으로 합니다. 이 글에서는 Django의 템플릿 시스템에 대해 살펴보겠습니다. Django 템플릿 시스템은 웹 애플리케이션의 프론트엔드를 구성하는 중요한 요소로, 데이터 표현을 위한 HTML을 생성합니다. 템플릿은 클라이언트에게 보여줄 내용을 정의하며, 코드의 재사용성을 높이고 HTML과 파이썬 코드를 분리하는 데 도움을 줍니다.
1. Django 템플릿 시스템 개요
Django의 템플릿 시스템은 HTML 파일 내에 변수와 태그를 사용하여 데이터를 동적으로 생성할 수 있도록 합니다. 템플릿은 Django의 MVC 패턴에서 View와 함께 작동하여 데이터를 표현합니다. Django의 View는 데이터를 처리하고, 템플릿은 이러한 데이터를 사용자에게 보여주는 역할을 합니다.
1.1 템플릿 기본 구조
Django 템플릿은 기본적으로 HTML 문서 내에 Django의 템플릿 태그와 변수를 포함합니다. 템플릿에서 변수를 사용하려면 {{ 변수명 }} 형태로 작성하며, 템플릿 태그는 {% 태그명 %} 형식으로 사용합니다. 예를 들어:
{% if user.is_authenticated %}
환영합니다, {{ user.username }}님!
{% else %}
로그인이 필요합니다.
{% endif %}
2. Django 템플릿 엔진 사용하기
2.1 템플릿 파일 생성
Django 프로젝트에서 템플릿을 사용하기 위해서는 먼저 템플릿 디렉토리를 설정해야 합니다. Django 프로젝트 내의 settings.py
파일에서 템플릿 디렉토리를 정의할 수 있습니다. 예를 들어:
# settings.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(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',
],
},
},
]
이 설정으로 인해 templates
디렉토리 내에 위치한 HTML 파일을 템플릿으로 사용할 수 있습니다.
2.2 기본 템플릿 작성
템플릿 파일은 templates
폴더 내에 .html 확장자로 저장합니다. 아래는 기본적인 HTML 템플릿의 예입니다:
예제 페이지
안녕하세요, {{ username }}님!
웹 개발을 시작해보세요!
3. 템플릿 렌더링
템플릿을 렌더링하기 위해 Django View에서 render()
함수를 사용합니다. 해당 함수는 템플릿의 경로와 컨텍스트 데이터를 인자로 받아 HTML 응답을 생성합니다.
3.1 View에서 템플릿 사용하기
# views.py
from django.shortcuts import render
def example_view(request):
context = {'username': '홍길동'}
return render(request, 'example.html', context)
위의 코드는 example.html
템플릿 내에서 username
변수를 사용하여 사용자에게 환영 메시지를 출력합니다.
4. 템플릿 태그와 필터
Django 템플릿에서는 데이터를 가공하거나 제어하기 위한 다양한 태그와 필터를 제공합니다. 여기서는 몇 가지 주요 태그와 필터에 대해 살펴보겠습니다.
4.1 기본 태그
4.1.1 if 태그
if
태그는 조건에 따라 다른 콘텐츠를 출력하는 데 사용됩니다.
{% if score >= 60 %}
합격입니다!
{% else %}
불합격입니다.
{% endif %}
4.1.2 for 태그
for
태그는 리스트나 배열을 반복하는 데 사용됩니다. 예를 들어:
{% for item in items %}
{{ item }}
{% endfor %}
4.2 필터 사용하기
필터는 변수의 출력을 형식화하는 방법입니다. 다음은 기본적인 필터 사용 예입니다:
{{ value|lower }}
위 코드는 value
변수를 소문자로 변환하여 출력합니다.
5. 블록과 상속
Django 템플릿 시스템은 상속을 통해 코드의 재사용성을 높일 수 있습니다. {% block %}
태그를 사용하여 기본 템플릿을 생성하고 다른 템플릿에서 이를 확장할 수 있습니다.
5.1 기본 템플릿
{% block title %}기본 제목{% endblock %}
나의 웹사이트
{% block content %}
{% endblock %}
5.2 자식 템플릿
{% extends 'base.html' %}
{% block title %}예제 제목{% endblock %}
{% block content %}
여기는 예제 페이지의 콘텐츠입니다.
{% endblock %}
6. 템플릿의 보안
Django는 XSS(교차 사이트 스크립팅) 공격을 방지하기 위해 템플릿에서 자동으로 HTML을 이스케이프(escape) 처리합니다. 변수에 직접 HTML 태그를 포함시키고자 하는 경우 safe
필터를 사용할 수 있습니다.
{{ user_input|safe }}
7. 결론
Django의 템플릿 시스템은 웹 애플리케이션 개발에서 중요한 역할을 합니다. 데이터 표현을 위한 강력한 기능을 제공하며, 코드의 유지보수성을 높이는 데 기여합니다. 이번 강좌를 통해 Django 템플릿 시스템의 기본 원리를 이해하고 실제 애플리케이션 개발에 활용해 보시길 바랍니다.