DJango 서버개발, 상속 및 포함을 이용한 템플릿 구조화하기

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의 템플릿 기능을 적극적으로 활용하여 세련된 웹사이트를 제작해 보시기 바랍니다.