[Python Django] 장고에서 사용자정의 템플릿 필터 만들기 : Creating Custom Template Filter Python


장고에서, Template 쪽에서 Variable 을 사용할 때, 원하는 형태로 프로세싱을 하고싶은 경우가 있다.

이럴때, 사용하는것이 Template Filter 인데 내가 원하는 기능을 하는 필터가 없을때는 직접 만들어서 써야한다.

필터에 대한 정의가 궁금한 분은 여기 에서 확인하세요 ~

그리고 공식문서 링크는 여기 입니다 ㅎㅎㅎ

========================================================

그럼 이제부터 Custom Filter 만드는 법을 간단히 알아보자 !!!!!!!!!!!!!!


1. templatetags 폴더 생성하기.

장고 프로젝트명이 myproj 라고 하자.
그렇다면 프로젝트 폴더안에 manage.py 가 있고 다른 어플리케이션 폴더들을 볼 수 있다.
만약 따로 어플리케이션을 추가한적이 없다면 myproj 라는 폴더만 하나 있을것이다.

즉, 아래와 같은 상황
myproj/manage.py
myproj/myproj/*

이때 templatetags 라는 폴더를 아래와 같은 경로에  생성해준다.
myproj/myproj/templatetags

이 폴더 안에 나만의 커스텀 tag 와  filter 를 구현한 파이썬 모듈을 넣을것이다.



2. Custom tag 및 filter 제작하기

myproj/myproj/tempaltetags/my_filters.py

라는 파일을 하나 만들어서 아래의 코드를 붙여넣어보자
나는 Dictionary 에서 특정 키의 Value를 리턴하는 필터를 만들것이다.


from django import template

register = template.Library()


@register.filter
def get_item(dictionary, key):
return dictionary.get(key)

이건 사실 예제일 뿐이고, 이 부분에 대해서는 직접 공식문서를 참조하는것이 좋다.
태그나 필터의 쓰임새에 따라서 다양하게 구현이 가능하기 때문이다.
공식문서에 보면 종류에 따라 샘플 코드도 있으니 참조하시면 됨.




3. settings.py 에 App 등록하기

장고프로젝트는 내부에 여러 어플리케이션을 담을 수 있다.
그 중 당신이 어떤 어플리케이션을 settings.py 에 등록했느냐에 따라 해당 어플리케이션 내부의 코드의 실행여부가 결정된다.
자, myproj 라는 앱이 settings.py 에 등록 되어 있는지 확인해보자.
보통 해당 장고 프로젝트의 settings.py 파일 위치는 manage.py 내부를 들여다보면 알 수 있다.

보편적인 Path 는 아래와 같다.

myproj/myproj/settings.py
myproj/myproj/settings/default.py
myproj/myproj/settings/base.py

그럼 settings.py 파일을 열고 App의 등록여부를 확인해보자.

INSTALLED_APPS = (
  'django.contrib.admin',
  ..
  ..
  ..
  'myproj'
)

myproj 가 꼭 포함되어있어야 한다!!



4. Template 파일에서 필터 Load 및 적용하기

자, 그럼 내가 만든 필터를 적용할 차례다.
blabla.html 이라는 template 파일의 context 로 아래와 같은 정보가 넘어갔다고 하자.

=== BlaBlaView ===

context['name_dic'] = {'shoe01':'컨버스', 'shoe02':'구두', 'shoe03':'군화'}
context['shoe_code'] = 'shoe02'

이때 template 에서 shoe_code 를 우리가 보기좋은 정보로 치환하기 위해서는 Dictionary의 Key값으로 조회하여 Value를 빼올 수 있는!!
내가만든 필터를 적용해야만 한다. 자 그럼 아래 코드를 보자.

=== blabla.html ===

{% load get_item from my_filters %}
...
<td>신발명</td>
<td>{{ name_dic | get_item:shoe_code }}</td>
...

=======================================================

어떤가? 간단하지 않은가~?!?~??~?~? ㅎㅎㅎ
그럼 장고 개발자 모두 화이팅 ^^

핑백



통계 위젯 (블랙)

434
619
360308

GoogleAdsenseResponsive

Cluster map