이전 포스팅에서는 Django 서버를 실행하고 관리하는 방법에 대해 알아보았습니다. 이번 포스팅에서는 Django의 HTML 템플릿 시스템에 대해 다룰 것입니다. Django는 Model-View-Template (MVT) 아키텍처를 따르고 있으며, 템플릿은 사용자에게 보여줄 화면을 렌더링하는 중요한 역할을 합니다. 이 글에서는 템플릿 파일을 생성하고, 데이터를 전달하여 HTML 페이지를 렌더링하는 과정을 살펴보겠습니다.
1. Django 템플릿 시스템이란?
Django 템플릿 시스템은 HTML 페이지를 동적으로 생성하는 도구입니다. 템플릿은 고정된 HTML 구조에 동적인 데이터를 삽입하여 사용자에게 보여줄 수 있습니다. 이를 통해 웹 페이지의 일관성을 유지하면서도 다양한 데이터를 보여줄 수 있습니다.
2. 템플릿 파일 생성하기
Django에서 템플릿 파일은 HTML 파일로, 보통 각 애플리케이션의 templates 디렉토리 안에 생성됩니다. 예를 들어, blog 애플리케이션에 대한 템플릿을 생성하려면 다음과 같은 디렉토리 구조를 만듭니다.
blog/
templates/
blog/
post_list.html
이렇게 파일을 생성한 후, post_list.html 파일에 기본적인 HTML 코드를 작성합니다.
<!DOCTYPE html>
<html>
<head>
<title>블로그 게시글 목록</title>
</head>
<body>
<h1>블로그 게시글</h1>
<ul>
{% for post in posts %}
<li>{{ post.title }} - {{ post.created_at }}</li>
{% endfor %}
</ul>
</body>
</html>
위의 템플릿에서 {% for %} 구문은 Django의 템플릿 태그로, posts 리스트를 순회하며 각 게시글의 제목과 작성 날짜를 출력합니다.
3. 뷰에서 템플릿 렌더링하기
이제 템플릿 파일을 렌더링하기 위해 뷰에서 템플릿과 데이터를 연결해야 합니다. blog/views.py에서 템플릿을 렌더링하는 코드를 추가합니다.
from django.shortcuts import render
from .models import Post
def post_list(request):
posts = Post.objects.all()
return render(request, 'blog/post_list.html', {'posts': posts})
render() 함수는 템플릿 파일과 데이터를 받아서 HTML 페이지를 생성합니다. 여기서는 Post 모델에서 모든 게시글을 가져와서 템플릿에 전달한 후, 이를 렌더링하여 사용자에게 보여줍니다.
4. 템플릿에서의 변수 출력
Django 템플릿에서는 변수 출력이 매우 간단합니다. 변수는 중괄호 {{ }}로 감싸서 사용할 수 있습니다. 예를 들어, 게시글의 제목과 내용을 출력하려면 다음과 같이 작성할 수 있습니다.
<h2>{{ post.title }}</h2>
<p>{{ post.content }}</p>
이때 post.title과 post.content는 뷰에서 템플릿으로 전달된 데이터입니다.
5. 템플릿 상속
Django의 템플릿 시스템은 템플릿 상속 기능을 제공합니다. 이 기능을 사용하면 여러 페이지에서 반복적으로 사용되는 레이아웃을 하나의 파일로 관리할 수 있습니다. 예를 들어, 기본 레이아웃 파일을 다음과 같이 만들 수 있습니다.
<!-- base.html -->
<!DOCTYPE html>
<html>
<head>
<title>{% block title %}사이트 제목{% endblock %}</title>
</head>
<body>
<header>
<h1>사이트 헤더</h1>
</header>
<div>
{% block content %}{% endblock %}
</div>
<footer>
<p>사이트 푸터</p>
</footer>
</body>
</html>
그런 다음, 다른 템플릿 파일에서 이 기본 레이아웃을 상속받아 사용할 수 있습니다.
<!-- post_list.html -->
{% extends 'base.html' %}
{% block title %}블로그 게시글 목록{% endblock %}
{% block content %}
<h2>게시글 목록</h2>
<ul>
{% for post in posts %}
<li>{{ post.title }} - {{ post.created_at }}</li>
{% endfor %}
</ul>
{% endblock %}
이렇게 하면 각 페이지마다 동일한 레이아웃을 유지하면서도 개별 페이지에 맞는 콘텐츠만 변경할 수 있습니다.
6. 템플릿 필터와 태그
Django 템플릿에는 필터와 태그를 사용하여 데이터를 변형하거나, 논리적인 처리를 할 수 있습니다. 필터는 변수를 출력할 때 적용되는 함수로, | 기호로 사용합니다.
예를 들어, 날짜 형식을 변환하려면 다음과 같이 date 필터를 사용할 수 있습니다.
<p>{{ post.created_at|date:"Y-m-d" }}</p>
태그는 제어 흐름을 나타내며, {% %} 안에 작성됩니다. 예를 들어, 조건문을 사용하여 특정 조건에 따라 내용을 다르게 표시할 수 있습니다.
{% if post.is_published %}
<p>이 게시글은 게시되었습니다.</p>
{% else %}
<p>이 게시글은 아직 게시되지 않았습니다.</p>
{% endif %}
이번 포스팅에서는 Django 템플릿 시스템을 사용하여 HTML 페이지를 렌더링하는 방법을 배웠습니다. 템플릿 파일을 생성하고, 뷰에서 데이터를 전달받아 사용자에게 동적인 웹 페이지를 보여줄 수 있었습니다. 또한 템플릿 상속과 필터, 태그를 통해 효율적인 템플릿 관리를 할 수 있었습니다.
다음 포스팅에서는 Django의 데이터베이스 모델과 ORM(Object-Relational Mapping)을 활용하여 데이터베이스와 상호작용하는 방법을 알아보겠습니다.
'Development Frameworks > Django' 카테고리의 다른 글
[Django] 장고 마스터하기 (Django Tutorial) - Django 마이그레이션(Migrations) [9/11] (2) | 2024.10.08 |
---|---|
[Django] 장고 마스터하기 (Django Tutorial) - Django 데이터베이스 모델과 ORM [8/11] (1) | 2024.10.07 |
[Django] 장고 마스터하기 (Django Tutorial) - Django 서버 실행 및 관리[6/11] (1) | 2024.10.05 |
[Django] 장고 마스터하기 (Django Tutorial) - Django URL 설정 [5/11] (1) | 2024.10.04 |
[Django] 장고 마스터하기 (Django Tutorial) - Django 애플리케이션 [4/11] (2) | 2024.10.03 |