파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 강의를 듣고 정리한 글입니다.
장고 템플릿 문법에서 활용하기 위해서 커스텀 템플릿 필터를 정의할 수 있다.
모델 프로퍼티 등은 템플릿 필터 문법으로 바로 활용할 수 있다. 그러나 인자가 필요한 함수는 사용이 불가능하다. 기본 템플릿 필터는 해당 함수로 인자를 넘기는 문법은 제공하지 않기 때문이다.
본 포스팅에서는 커스텀 템플릿을 정의해서 인자가 있는 모델함수를 사용하는 코드를 작성해보겠다.
__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>