DJango 서버개발, 템플릿 필터 및 태그 사용법

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의 세계를 더욱 깊이 탐험해보세요!

이 글은 Django 서버 개발과 관련된 내용을 다루었습니다. 더 많은 정보와 튜토리얼을 원하신다면 관련 자료를 찾아보시기 바랍니다.