Django는 파이썬 기반의 웹 프레임워크로, 빠른 개발과 단순한 구조로 많은 사랑을 받고 있습니다. 본 글에서는 Django의 템플릿 시스템에서 템플릿 필터와 태그를 사용하는 방법에 대해 깊이 있게 살펴보겠습니다. 템플릿 필터와 태그는 Django의 템플릿 언어의 핵심 요소로, 우리가 동적 웹 페이지를 구축하는 데 큰 도움을 줍니다.
1. Django 템플릿 시스템 개요
Django의 템플릿 시스템은 HTML 페이지를 동적으로 생성할 수 있는 방법을 제공합니다. 템플릿은 기본 HTML 코드와 Django의 템플릿 태그, 필터 등을 결합하여 작성됩니다. 이러한 템플릿을 사용하면 뷰에서 비즈니스 로직을 분리하여 코드의 재사용성을 높이고 유지보수를 용이하게 할 수 있습니다.
2. 템플릿 필터란?
템플릿 필터는 템플릿에서 사용되는 함수를 의미합니다. 필터는 특정 데이터에 적용되어 값을 변형하여 출력할 수 있도록 돕습니다. Django는 미리 정의된 여러 필터를 제공하며, 사용자 정의 필터도 작성할 수 있습니다.
2.1 기본 제공 필터
Django는 기본적으로 다음과 같은 몇 가지 필터를 제공합니다.
date
: 날짜를 지정한 형식으로 출력합니다.lower
: 문자열을 소문자로 변환합니다.upper
: 문자열을 대문자로 변환합니다.length
: 목록이나 문자열의 길이를 반환합니다.
2.2 필터 사용 예제
{% load static %}
{{ my_date|date:"Y-m-d" }}
{{ my_string|upper }}
{{ my_list|length }}
3. 템플릿 태그란?
템플릿 태그는 조건문, 반복문 및 기타 논리적 구조를 템플릿에 포함할 수 있도록 하는 기능입니다. 태그는 {% %}
구문으로 사용됩니다.
3.1 기본 제공 태그
{% if %}
: 조건문을 나타냅니다.{% for %}
: 반복문을 나타냅니다.{% include %}
: 다른 템플릿을 포함합니다.{% block %}
: 템플릿 확장에서 사용합니다.
3.2 태그 사용 예제
{% for item in item_list %}
{{ item.name }}: {{ item.price }} 원
{% endfor %}
4. 사용자 정의 템플릿 필터 및 태그 만들기
기본 제공 필터와 태그 외에도 사용자 정의 필터와 태그를 만들어 사용할 수 있습니다. 이를 통해 필요에 맞는 처리를 추가할 수 있습니다.
4.1 사용자 정의 필터 만들기
사용자 정의 필터는 Django의 템플릿 필터 파일에서 작성할 수 있습니다. 아래는 간단한 사용자 정의 필터를 만드는 예제입니다.
from django import template
register = template.Library()
@register.filter
def multiply(value, arg):
return value * arg
위의 코드는 multiply
라는 필터를 정의하여 숫자를 곱하는 기능을 수행합니다. 이를 사용하려면 템플릿에서 필터를 로드한 후 사용할 수 있습니다.
{% load my_filters %}
{{ some_number|multiply:5 }}
4.2 사용자 정의 태그 만들기
사용자 정의 태그도 필터와 비슷하게 정의할 수 있습니다. 아래는 간단한 사용자 정의 태그를 만드는 예제입니다.
from django import template
register = template.Library()
@register.simple_tag
def sum_numbers(a, b):
return a + b
위의 코드는 두 숫자의 합계를 계산하는 태그입니다. 템플릿에서는 다음과 같이 사용할 수 있습니다.
{% load my_tags %}
{% sum_numbers 5 10 as total %}
총합: {{ total }}
5. 복잡한 예제: 블로그 댓글 시스템
이제 실제 애플리케이션에서 필터와 태그를 어떻게 활용할 수 있는지 살펴보겠습니다. 간단한 블로그 댓글 시스템을 구현해보겠습니다.
5.1 모델 정의하기
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
class Comment(models.Model):
post = models.ForeignKey(Post, related_name='comments', on_delete=models.CASCADE)
author = models.CharField(max_length=50)
text = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
5.2 뷰 작성하기
from django.shortcuts import render, get_object_or_404
from .models import Post
def post_detail(request, post_id):
post = get_object_or_404(Post, id=post_id)
return render(request, 'post_detail.html', {'post': post})
5.3 템플릿 작성하기
이제 템플릿을 작성하여 댓글을 동적으로 출력해보겠습니다.
<h1>{{ post.title }}</h1>
<p>{{ post.content }}</p>
<h2>댓글</h2>
<ul>
{% for comment in post.comments.all %}
<li>{{ comment.author }}: {{ comment.text }} ({{ comment.created_at|date:"Y-m-d" }})</li>
{% endfor %}
</ul>
5.4 사용자 정의 필터 및 태그 사용하기
비즈니스 로직을 분리하기 위해 추가적인 필터와 태그를 사용해볼 수 있습니다.
from django import template
import datetime
register = template.Library()
@register.filter
def is_recent(comment):
return (datetime.datetime.now() - comment.created_at).days < 30
6. 결론
Django의 템플릿 필터와 태그는 웹 애플리케이션의 뷰를 구성하는 데 있어 매우 유용하며, 필요한 데이터를 쉽고 간편하게 변형할 수 있는 기능을 제공합니다. 본 강좌를 통해 기본 제공 필터와 태그의 사용법을 알아보았고, 사용자 정의 필터 및 태그를 만들어 자체적인 로직을 적용하는 방법에 대해서도 다루었습니다. 이로 인해, 더 나은 웹 애플리케이션을 개발하는 데 큰 도움이 되길 바랍니다.
이제 여러분은 Django의 강력한 템플릿 시스템을 활용하여 보다 효과적으로 웹 애플리케이션을 개발할 수 있습니다. 많은 실행을 통해 다양한 기능을 직접 구현해보시고, Django의 세계를 더욱 깊이 탐험해보세요!