Django는 강력한 웹 프레임워크로, 파이썬 기반의 백엔드 개발에 널리 사용됩니다. Django의 템플릿 시스템은 웹 어플리케이션의 프론트엔드와 백엔드를 효과적으로 분리하여 개발할 수 있게 해줍니다. 이 글에서는 Django에서 템플릿 상속과 포함을 통한 구조화 방법에 대해 자세히 설명하고, 예제 코드를 통해 실제 적용 방법을 시연하겠습니다.
1. Django 템플릿 시스템 소개
Django 템플릿은 Dynamic HTML을 생성하는 데 사용되는 파일입니다. 템플릿 파일에는 보통 HTML 마크업과 Django 템플릿 언어가 혼합되어 들어갑니다. Django의 템플릿 언어는 파이썬과 유사한 문법을 갖고 있어 배우기 쉽습니다. 템플릿 시스템을 사용하면 웹 페이지의 구조를 쉽게 관리하고 재사용할 수 있습니다.
1.1. 템플릿의 기본 구조
Django 템플릿 파일은 .html 확장자를 가지며, HTML과 템플릿 태그가 포함되어 있습니다. 기본적인 템플릿의 구조는 다음과 같습니다:
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>나의 첫 Django 템플릿</title>
</head>
<body>
<h1>안녕하세요, Django!</h1>
</body>
</html>
2. 템플릿 상속
템플릿 상속은 기본 템플릿을 만들고, 이를 상속받아 필요한 부분만 재정의하는 방식입니다. 이를 통해 중복 코드를 줄이고, 일관된 디자인을 유지할 수 있습니다.
2.1. 기본 템플릿 만들기
먼저, 기본 템플릿을 설정해보겠습니다. 다음은 `base.html`이라는 파일입니다:
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>{% block title %}기본 제목{% endblock %}</title>
</head>
<body>
<header>
<h1>나의 웹사이트</h1>
</header>
<main>
{% block content %}{% endblock %}
</main>
<footer>
<p>Copyright © 나의 웹사이트</p>
</footer>
</body>
</html>
2.2. 상속받는 템플릿 만들기
이제 `base.html` 템플릿을 상속받는 다른 템플릿을 만들어보겠습니다. 이 템플릿은 `index.html`입니다.
{% extends "base.html" %}
{% block title %}홈페이지 제목{% endblock %}
{% block content %}
<h2>환영합니다!</h2>
<p>여기는 나의 첫 Django 웹사이트입니다.</p>
{% endblock %}
3. 템플릿 포함
템플릿 포함은 하나의 템플릿 dentro 다른 템플릿을 포함시키는 방법입니다. 이 방법을 사용하면 공통된 레이아웃이나 요소를 여러 템플릿에서 재사용할 수 있습니다.
3.1. 포함할 템플릿 만들기
헤더를 포함하는 `header.html`을 만들어보겠습니다.
<header>
<h1>나의 웹사이트</h1>
</header>
3.2. 포함된 템플릿 사용하기
`base.html` 파일에서 `header.html`을 포함해 보겠습니다.
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>{% block title %}기본 제목{% endblock %}</title>
</head>
<body>
{% include "header.html" %}
<main>
{% block content %}{% endblock %}
</main>
<footer>
<p>Copyright © 나의 웹사이트</p>
</footer>
</body>
</html>
4. 실습: Django 프로젝트 설정하기
이제 전체적인 개요를 마쳤으니, 실제 Django 프로젝트를 설정하여 템플릿 상속과 포함을 구현해보겠습니다.
4.1. Django 프로젝트 생성
# Django 설치
pip install django
# Django 프로젝트 생성
django-admin startproject myproject
# 프로젝트 디렉토리로 이동
cd myproject
# Django 앱 생성
python manage.py startapp myapp
4.2. 템플릿 설정하기
`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',
],
},
},
]
4.3. URL 설정
`urls.py`에서 뷰와 URL을 연결합니다.
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
4.4. 뷰 만들기
`views.py`에 index 뷰를 정의합니다.
from django.shortcuts import render
def index(request):
return render(request, 'index.html')
4.5. 템플릿 디렉토리 생성
마지막으로, 프로젝트 루트에 templates 디렉토리를 생성하고, 이전에 생성한 HTML 파일들을 이곳에 위치시킵니다.
5. 템플릿 상속 및 포함 활용하기
이제 완벽한 템플릿 구조가 준비되었습니다. 템플릿 상속과 포함을 통해 웹 애플리케이션의 뷰와 HTML 구조를 효과적으로 관리할 수 있게 되었으며, 이는 코드의 재사용성과 일관성을 증가시켜 줍니다.
5.1. 추가적인 템플릿 태그 활용
Django 템플릿에서는 다양한 태그와 필터를 제공하여 데이터를 처리할 수 있습니다. 예를 들어, {% if %}, {% for %} 같은 조건문과 반복문을 사용할 수 있습니다. 이를 통해 동적인 콘텐츠를 쉽게 생성할 수 있습니다.
5.2. 템플릿 필터 사용하기
Django의 필터를 사용하여 데이터의 표현 방식을 변경할 수 있습니다. 예를 들어, 문자열의 대문자 변환, 날짜format 지정 등 다양한 기능을 제공합니다.
<p>오늘 날짜: {{ today|date:"Y년 m월 d일" }}</p>
6. 결론
Django에서 템플릿 상속 및 포함은 웹 애플리케이션의 유지 보수성과 확장성을 크게 향상시킵니다. 강력한 템플릿 시스템을 기반으로 웹 프로젝트를 구조화하면 개발 속도를 증가시키고, 코드의 가독성을 개선할 수 있습니다.
최종적으로 효과적인 템플릿 관리는 팀 협업에 매우 중요하며, 이는 프로젝트의 성공적인 진행과도 직결됩니다. Django의 템플릿 기능을 적극적으로 활용하여 세련된 웹사이트를 제작해 보시기 바랍니다.