๐ ์ด ํฌ์คํ ์์๋ Django์ "Built-in Template Filter"๊ณผ "Custom Template Filter"๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
๐ฅ Built-in Template Filter
๐ฅ Custom Template Filter
Django๋ Template Filter๋ฅผ ํตํด Template์์ ํ์ดํ(|
)๋ก ์์ํด์ ํจ์์ฒ๋ผ ๋ฌธ์์ด ๋ฑ์ ์ฒ๋ฆฌํ๋๋ฐ ๋์์ ์ค๋๋ค.
์๋ ์๊ฐ๋ "Built-in Template Filter" ๋ฟ๋ง์๋๋ผ |date
, |addslashes
, |cut
, |floatformat
๋ฑ ๋ค์ํ Template Filter๊ฐ ์กด์ฌํฉ๋๋ค.
๐ |add : ์ซ์๋ฅผ ๋ํด์ค๋๋ค.
{{ value|add:"2" }} # ๐ value = 3 ์ด๋ผ๋ฉด,, 2๋ฅผ ๋ํด 5๋ก ๋ํ๋ ๋๋ค.
๐ |capfirst : ์ฒซ๋ฒ์งธ ๊ธ์๋ฅผ ๋๋ฌธ์๋ก ๋ณ๊ฒฝ์์ผ์ค๋๋ค.
{{ value|capfirst }} # ๐ value = 'django' ๋ผ๋ฉด,, "Django"๋ก ๋ณํ
๐ |center : ๊ณต๋ฐฑ์ ์ฃผ๊ณ , ๊ฐ์ด๋ฐ ์ ๋ ฌ์ ํด์ค์.
"{{ value|center:"15" }}" # ๐ value = 'Django' ๋ผ๋ฉด,, " Django "๋ก ๋ณํ
๐ |first : ๋ฆฌ์คํธ์์ ๋งจ ์ฒ์ ์์๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
{{ value|first }} # ๐ value = ['a', 'b', 'c']๋ผ๋ฉด,, 'a'๋ง ๊ฐ์ ธ์ด
๐ |join : python join ๋ฌธ๋ฒ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ด์์.
{{ value|join:" // " }} # ๐ value = ['a', 'b', 'c']๋ผ๋ฉด,, "a // b // c"
ํ์ํ ๊ธฐ๋ฅ์ด "Built-in Template Filter"๋ก ์ ๊ณต๋์ง ์๋ค๋ฉด, ์ง์ ์ถ๊ฐํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ฅผ "Custom Template Filter"๋ผ ํฉ๋๋ค.
str์ ๋๋ฌธ์๋ก ๋ณ๊ฒฝ์ํค๋ Custom Template Filter๋ฅผ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค. "Custom Template Filter"๋ฅผ ์ฌ์ฉํ app ๋๋ ํ ๋ฆฌ ๋ฐ๋ก ์๋์ "templatetags" ๋๋ ํ ๋ฆฌ๋ฅผ ์์ฑํฉ๋๋ค. ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ์์ฑํ๋ฉด Django๊ฐ ์ธ์ํ ์ ์์ผ๋ ๊ผญ "templatetags"๋ผ๋ ์ด๋ฆ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
"templatetags" ๋๋ ํ ๋ฆฌ ๋ด์ "__init__.py"
์ ๋ฑ๋กํ ํจ์๋ฅผ ๋ฃ์ด์ค python ํ์ผ์ ์์ฑํฉ๋๋ค. ์ ๋ "my_filter.py"๋ก ์์ฑํ์์ต๋๋ค.
app dir/ # ๐ ์ฌ์ฉํ app ๋๋ ํ ๋ฆฌ __init__.py models.py templatetags/ # ๐ "templatetags" dir ๋ง๋ญ๋๋ค:) __init__.py # ๐ __ini__.py๋ฅผ ๋ง๋ญ๋๋ค:) my_filter.py # ๐ python ํจ์๋ฅผ ๋ง๋ค ํ์ผ์ ๋ง๋ญ๋๋ค:) views.py
Custom Template Filter๋ฅผ ๋ฑ๋กํ๋ ๋ฐฉ๋ฒ์ ์๋ 2๊ฐ์ง๊ฐ ์์ต๋๋ค.
from django import template # ๐ "template" import register = template.Library() # ๐ template.Library()์ ์ถ๊ฐํด์ฃผ์ด์ผ ํฉ๋๋ค. @register.filter(name="my_upper") # ๐ template.Library()์ filter๋ฅผ ๋ฑ๋ก def my_upper(value): return value.upper()
from django import template # ๐ "template" import register = template.Library() # ๐ template.Library()์ ์ถ๊ฐํด์ฃผ์ด์ผ ํฉ๋๋ค. def my_upper(value): return value.upper() register.filter("lululala", my_upper) # ๐ template์์ |lululala๋ก ์ฌ์ฉํ ์ ์์ด์:)
{% extends "base.html" %} {% load my_filter %} # ๐ custom template filter๋ฅผ load {% block content %} {{'somthing'|my_upper}} # ๐ ๋ฑ๋กํ filte ๊ธฐ๋ฅ์ด ์ ์ฉ๋์ด 'somthing'์ด 'SOMETHING'๋ก ๋ํ๋ฉ๋๋ค. {% endblock %}