Django(장고) 템플릿 필터란?

2024. 9. 13. 13:26·Category/Django
728x90

Django 템플릿 필터는 템플릿에서 데이터를 출력할 때 다양한 변형이나 처리를 할 수 있도록 도와주는 기능입니다. 필터는 출력하고자 하는 변수에 파이프(|) 기호를 사용하여 적용할 수 있으며, 값을 변형하거나 포맷을 변경하는 데 주로 사용됩니다.

예를 들어, 템플릿에서 날짜 형식을 지정하거나 문자열을 소문자로 변환하는 등의 작업을 할 때 필터를 사용합니다.

템플릿 필터의 기본 사용법

템플릿에서 필터는 다음과 같은 형식으로 사용됩니다:

{{ 변수명|필터명 }}

필터는 여러 개를 중첩하여 사용할 수도 있습니다:

{{ 변수명|필터1|필터2 }}

주요 템플릿 필터 종류

Django에서 자주 사용하는 템플릿 필터는 다음과 같습니다:

1. date

날짜 및 시간 객체를 원하는 형식으로 변환합니다.

{{ some_date|date:"Y-m-d" }}  <!-- 2024-01-01 -->

2. length

리스트나 문자열의 길이를 반환합니다.

{{ my_list|length }}  <!-- 리스트의 항목 개수 -->
{{ my_string|length }}  <!-- 문자열의 문자 개수 -->

3. lower / upper

문자열을 소문자(lower) 또는 대문자(upper)로 변환합니다.

{{ my_string|lower }}  <!-- 문자열을 소문자로 -->
{{ my_string|upper }}  <!-- 문자열을 대문자로 -->

4. truncatechars

주어진 문자 수만큼 문자열을 자르고, 뒤에 '...'을 추가합니다.

{{ my_string|truncatechars:10 }}  <!-- 문자열을 10자까지만 보여줌 -->

5. default

변수의 값이 None일 경우 기본값을 설정합니다.

{{ my_value|default:"기본값" }}

6. join

리스트를 특정 구분자로 연결된 문자열로 변환합니다.

{{ my_list|join:", " }}  <!-- 리스트의 항목을 ", "로 연결 -->

7. cut

문자열에서 특정 문자열을 제거합니다.

{{ my_string|cut:" " }}  <!-- 문자열에서 공백 제거 -->

8. escape

HTML 태그나 특수 문자를 이스케이프하여 웹 페이지에서 안전하게 표시되도록 합니다.

{{ my_html_content|escape }}  <!-- HTML 태그를 이스케이프 처리 -->

9. safe

이 필터는 문자열을 HTML로 렌더링할 수 있도록 허용합니다. 이 경우 escape와 반대로 작동합니다. 이 필터를 사용할 때는 사용자 입력을 허용하지 않도록 주의해야 합니다.

{{ my_html_content|safe }}  <!-- HTML이 렌더링될 수 있도록 허용 -->

10. linebreaks

문자열에 포함된 줄 바꿈(\n)을 HTML <br> 태그로 변환합니다.

{{ my_string|linebreaks }}

11. pluralize

숫자의 값에 따라 복수형을 출력할 수 있습니다.

{{ my_value|pluralize }}  <!-- 기본: s -->
{{ my_value|pluralize:"ies" }}  <!-- 복수형에 따라 'ies' 추가 -->

12. yesno

Boolean 값을 사람이 이해할 수 있는 텍스트로 변환합니다.

{{ is_active|yesno:"예,아니오" }}

예시

아래는 다양한 템플릿 필터를 활용한 예시입니다:

<p>오늘의 날짜: {{ today|date:"Y-m-d" }}</p>
<p>리스트의 길이: {{ my_list|length }}</p>
<p>원본 문자열: {{ my_string }}</p>
<p>소문자 변환: {{ my_string|lower }}</p>
<p>대문자 변환: {{ my_string|upper }}</p>
<p>10자만 출력: {{ my_string|truncatechars:10 }}</p>
<p>기본값: {{ my_value|default:"없음" }}</p>

사용자 정의 필터

기본 제공되는 필터 외에도 직접 커스텀 필터를 정의할 수 있습니다. templatetags 디렉터리를 만들고, 그 안에 커스텀 필터를 정의하여 사용할 수 있습니다.

예를 들어, 소문자를 대문자로 변환하는 사용자 정의 필터:

templatetags/custom_filters.py 파일 생성:

from django import template

register = template.Library()

@register.filter(name='my_custom_upper')
def my_custom_upper(value):
    return value.upper()

템플릿에서 사용:

{% load custom_filters %}

<p>{{ some_string|my_custom_upper }}</p>

 

정리

  • 템플릿 필터는 출력값을 변형하거나 포맷을 지정할 때 사용합니다.
  • | 기호를 사용하여 템플릿 변수에 필터를 적용할 수 있습니다.
  • 장고 기본 제공 필터 외에도 사용자 정의 필터를 생성할 수 있습니다.

Django 템플릿 필터를 활용하면 출력 데이터를 유연하게 다룰 수 있어, 더 나은 사용자 경험을 제공합니다.

728x90

'Category > Django' 카테고리의 다른 글

django-environ란?  (0) 2024.09.16
WSGI(웹 서버 게이트웨이 인터페이스, Web Server Gateway Interface)란?  (1) 2024.09.15
Paginator란?  (0) 2024.09.13
장고(Django) 역참조를 위한 '모델명_set'  (0) 2024.09.11
장고(Django) 마이그레이션이 필요한 경우와 필요 없는 경우  (0) 2024.09.11
'Category/Django' 카테고리의 다른 글
  • django-environ란?
  • WSGI(웹 서버 게이트웨이 인터페이스, Web Server Gateway Interface)란?
  • Paginator란?
  • 장고(Django) 역참조를 위한 '모델명_set'
Corinee
Corinee
  • Corinee
    Coding Note
    Corinee
  • 전체
    오늘
    어제
    • 분류 전체보기 (356)
      • Category (351)
        • Algorithm (7)
        • SQL (2)
        • Java (4)
        • C (9)
        • React (7)
        • JavaScript (9)
        • CSS (2)
        • Node (1)
        • SpringBoot (26)
        • Database (3)
        • Network (1)
        • Django (6)
        • Python (21)
        • Flask (4)
        • iOS (25)
        • Swift (4)
        • Flutter (11)
        • Dart (3)
        • Git (1)
        • Firebase (1)
        • Gof (1)
        • 정보처리기사 (112)
        • AI (5)
        • NestJs (4)
        • Docker (1)
        • 사이드 프로젝트 (1)
        • Note (78)
        • Socket (1)
        • 개인 정보 처리 방침 (1)
        • 면접 (0)
        • Vue.js (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    stdlib.h
    useEffect
    inp
    중첩 함수(nested function)
    intellij 콘솔 한글 깨짐
    react
    styled-components
    public vs assets
    시맨틱 버전(semantic versioning
    javascript 필수 문법
    프로세스 강제 종료
    chrome extension 자동 배포
    jackson 라이브러리
    react router
    json.parse(json.stringify())
    semver)
    Jest
    named export vs default export
    core web vitals
    ajax (asynchronous javascript and xml)
    소프트웨어 버전 관리
    structuredclone()
    x.y.z (메이저.마이너.패치)
    쉽게 풀어쓴 C언어 Express
    원시값(primitive)
    mermaid-cli
    Collections
    counter
    defaultdict
    math.h
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Corinee
Django(장고) 템플릿 필터란?
상단으로

티스토리툴바