커스텀 템플릿 필터 활용하기

guava·2022년 1월 4일
0

파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 강의를 듣고 정리한 글입니다.

장고 템플릿 문법에서 활용하기 위해서 커스텀 템플릿 필터를 정의할 수 있다.

모델 프로퍼티 등은 템플릿 필터 문법으로 바로 활용할 수 있다. 그러나 인자가 필요한 함수는 사용이 불가능하다. 기본 템플릿 필터는 해당 함수로 인자를 넘기는 문법은 제공하지 않기 때문이다.

본 포스팅에서는 커스텀 템플릿을 정의해서 인자가 있는 모델함수를 사용하는 코드를 작성해보겠다.

커스텀 템플릿 필터 정의

  • 공식 문서 링크
  • 앱 내에 templatetags 파이썬 모듈 생성. (__init__.py, instagram_tags.py 포함)
# instagram/templatetags/instagram_tags.py

from django import template

register = template.Library()  # 필터 등록을 위한 객체를 얻는다.

@register.filter  # 사용자 정의 필터를 등록한다.
def is_like_user(post, user):
    return post.is_like_user(user)

템플릿에서 활용

  • {% load instagram_tags %} : 커스텀 태그인 instagram_tags를 불러온다.
  • {% if post|is_like_user:user %}: instagram_tags에 등록된 is_like_user 필터를 사용한다. post 객체에 대해 필터를 수행하되 인자로 user를 넘긴다고 보면 된다.
{% load instagram_tags %}

<div class="card-footer">
    {% if post|is_like_user:user %}
      <a href="{% url 'instagram:post_unlike' post.pk %}" style="color: inherit">
        <img src="{% static 'bootstrap-4.6.1-dist/icon/heart-fill.svg' %}" alt="heart-fill">
      </a>
    {% else %}
      <a href="{% url 'instagram:post_like' post.pk %}" style="color: inherit">
        <img src="{% static 'bootstrap-4.6.1-dist/icon/heart.svg' %}" alt="heart">
      </a>
    {% endif %}
</div>

0개의 댓글