장고는 매우 잘 갖추어진 프레임워크이다.
이미 구현되어있는 부분들이 많아서 개발자가 직접 구현하지 않고 그대로 사용하면 되는 부분들이 많다.
이러한 여러 기능들 중에 가장 유용한 기능을 하나 뽑으라면 난 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
이걸 다 보고 나면 "여기 없는 건 어떡하냐?" 이런 생각이 들 수 있다. 장고는 프레임워크의 이수만이다. 무슨 말이냐면 입맛에 맞는게 없으면 만들어서 쓸 수 있게 해 놓았다.
일단 먼저 필터를 사용할 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
만약 장고 built-in filter가 궁금하다면
django/template/defaultfilters.py
여기로 가보면 볼 수 있다.
오늘은 Filter에 대해 알아 보았고 다음에는 Tag에 대해 알아 보겠다.
'Web Programming > Django' 카테고리의 다른 글
[Django] django apache (CentOS) 배포 (0) | 2021.01.26 |
---|---|
[Django] 장고 migrations 명령어 (0) | 2020.12.24 |
[Django] Trouble Shooting (0) | 2020.12.02 |
[Django] Admin 등록 방법 (0) | 2020.12.02 |
[Django] 프로젝트에 등록되어 있지 않은 파일에서 장고 사용하기 (0) | 2020.12.02 |