오히려 좋아..

상황이 나쁘게만 흘러가는 것 같을 때 외쳐보자.. .

궁금한 마음으로 포트폴리오 보기

Web Programming/Django

[Django] Template Tags and Filters (Filter 편)

junha6316 2020. 12. 10. 22:43

장고는 매우 잘 갖추어진 프레임워크이다.

이미 구현되어있는 부분들이 많아서 개발자가 직접 구현하지 않고 그대로 사용하면 되는 부분들이 많다.

이러한 여러 기능들 중에 가장 유용한 기능을 하나 뽑으라면 난 Django Template을 꼽고 싶다.

오늘은 Django Template 중 Tag와 Filter에 대해 알아보도록 하겠다.

먼저 상대적으로 자유도가 낮은 filter를 다루고 이후에 Tag를 다루도록 하겠다.

1. Filter

Filter는 template에서 Variable안에서 사용하는 툴로서 아래와 같이 사용한다.

{{variable|filter}}

variable과 적용하려는 filter를 "|" 로 구분해서 사용하면 variable에 해당 filter가 적용되서 웹페이지 상에 표현된다. 예를 들어 add filter를 생각해보면 아래와 같이 add태그를 사용하면

{{value|add:"2"}}

value가 18이라고 하면 실제 웹상에 출력될 때는 '20' 이라는 값으로 출력된다. 내가 사용한 가장 강력한 Filter는 date Filter로 일반적으로 백엔드에서 프런트엔드로 날짜를 넘겨 줄 때 datetime 객체인 경우가 대부분인데 datetime 객체는 내가 필요하지 않은 정보들까지 출력된다. 이러한 문제를 아래처럼 date filter를 이용해 해결할 수 있다.

{{datetime_obj|date:"D d M Y"}}

 

를 적으면 'Wed 09 Jan 2008' 의 형식으로 출력된다. 매우 강력한 기능!!

django built-in filter는 대략 50여개 정도 있으며 아래 장고 공식 문서에서 찾아 사용하면 된다.

docs.djangoproject.com/en/3.1/ref/templates/builtins/#ref-templates-builtins-filters

 

Built-in template tags and filters | Django documentation | Django

Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate

docs.djangoproject.com

 

이걸 다 보고 나면 "여기 없는 건 어떡하냐?" 이런 생각이 들 수 있다. 장고는 프레임워크의 이수만이다. 무슨 말이냐면 입맛에 맞는게 없으면 만들어서 쓸 수 있게 해 놓았다.

이 중에 네 취향이 하나쯤 있겠지?

일단 먼저 필터를 사용할 app 디렉토리(startapp으로 생성한 폴더)에 templatetags라는 이름을 가진 폴더를 만들어 준다.

안에 생성할 파이썬 파일은 2개다. 하나는 __init__.py(파이썬에서 디렉토리로 인식) 우리가 새롭게 생성할 filter인 my_filter.py를 만들어 주면된다. my_filter.py안에는 아래와 같이 선언해준다.

# my_app => templatetags => my_filter.py


from django import template

register = template.Library()

def my_filter(value, arg):
	'''This is my filter'''
    return '뭘 원하는지 몰라서 다 준비했어'
    

파일을 먼저 로드해주고 아래처럼 선언한뒤 아래와 같이 사용하면 되고 

{% load my_filter %} #여기에는 파일이름을 로드하고


{{value|my_filter}} #여기에는 함수 이름(필터)를 사용해준다,

value와는 관계 없이 "뭘 원하는지 몰라서 다 준비했어" 가 출력된다.

 

장고는 정말 최고다.....

value를 이용해 무언가 하고 싶으면 my_filter내부에 로직을 세워서 값을 반환하면 된다.

만약 어떻게 해야되는지 모르겠다?? 그렇다면 공식 문서를 보라

docs.djangoproject.com/en/3.1/howto/custom-template-tags/#howto-writing-custom-template-filters

 

Custom template tags and filters | Django documentation | Django

Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate

docs.djangoproject.com

만약 장고 built-in filter가 궁금하다면

django/template/defaultfilters.py

여기로 가보면 볼 수 있다.

 

오늘은 Filter에 대해 알아 보았고 다음에는 Tag에 대해 알아 보겠다.