[Django 기초] Template Language
템플릿 언어(Template Language) 는 Django의 템플릿에서 사용할 수 있는 특별한 문법으로 템플릿 변수,
템플릿 필터, 템플릿 태그, 탬플릿 코멘트(주석)이 있다.
- 템플릿 변수(Template Variable)
{{ variable }}
템플릿 변수는 템플릿이 렌더될 때 해당 변수가 의미하는 값으로 변환된다. 뷰(View)에서 가공한 데이터를
템플릿으로 넘겨주면 템플릿에서 는 템플릿 변수를 사용해 넘겨받은 데이터에 접근할 수 있다.
템플릿 변수는 점(.)을 사용해서 변수 안쪽 속성에 접근할 수 있다.
user = {"name" : "우재", "coffee" : True}
변수 user에 user.name으로 "우재"라는 안쪽 값에 접근할 수 있다.
(순서)
1. 변수를 사전형(dict)으로 생각하고 점(.) 연산자로 Key값 조회
2. 변수를 객체로 생각하고 내부 속성값 조회 또는 함수 호출
3. 변수를 리스트(list)로 생각하고 점(.) 연산자로 Index whghl
Django에서 템플릿의 점 연산자를 만나면 자동으로 위의 경우대로 순서대로 처리하며 알맞은 값으로
변환되지만 내가 접근하려는 템플릿 변수가 어떤 자료형인지 알고 점(.) 연산자를 사용해야지만
에러를 방지할 수 있다.
- 템플릿 필터(Template Filter)
{{ variable|filter }}
템플릿 변수에 파이프( | ) 를 쓰고 템플릿 필터를 사용하면 템플릿 변수를 특정 형식으로 변환할 수 있다.
{{ variable|filter:args }}
일부 필터는 뒤에 인자를 필요로 한다. Django는 약 60개의 내장 템플릿 필터를 제공하며 개발자가 직접
필터를 정의해서 사용하는 것도 가능하다.
(내장 템플릿)
o default
참조하는 템플릿 변수가 비어 있거나 bool형 False일 경우 변환되는 값을 지정한다.
{{ variable|filter:args }}
-> 변수가 비어 있거나 False면 coffee라는 텍스트로 대체된다.
o capfirst
맨 첫글자를 대문자로 바꿔준다.
{{ variable|capfirst }}
o random
반복 가능한 템플릿 변수에 대해 무작위로 하나를 추출해 변환한다.
{{ variable|random }}
o upper & lower
템플릿 변수를 대문자 또는 소문자로 변환한다.
{{ variable | upper }} , {{ variable | lower }}
ljust & rjust
주어진 길이 내에서 공백을 넣어 왼쪽 정렬(ljsut) 또는 오른쪽 정렬(rjust)을 한 문자열로 변환한다.
{{ variable|ljust:"length" }}, {{ variable|rjust:"length" }}
variable이 'codedit'일 때 {{ variable | ljust:"10" }} 이라면 'codeit "이 된다. 공백을 표시해서 보면
"codeit_ _ _ _"이런 형태이다.
Django 공식 문서
https://docs.djangoproject.com/en/2.2/ref/templates/builtins/#ref-templates-builtins-filters
Built-in template tags and filters | Django documentation | Django
Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate
docs.djangoproject.com
- 템플릿 태그(Template Tag)
{% tag %}
템플릿 태그는 템플릿을 작성할 때 반복문, 조건문 등의 로직을 사용해서 마치 프로그래밍 하듯 템플릿을
작성할 수 있게 해준다. Django가 기본적으로 제공하는 태그가 있지만, 개발자가 직접 태그를 정의해서 사용 가능
{% tag %} ~ {% endtag %}
태그의 형태는 단독으로 사용하는 템플릿 태그와 여는 태그와 닫는 태그가 필요한 템플릿 태그가 있다.
(기본 템플릿 태그)
o for
{% for obj in values %} ~ {% endfor %}
반복 가능한 객체를 반복하며 템플릿을 작성할 수 있다.
{% for food in foods %}
<li> {{ food.name }} </li>
{% endfor %}
역순
{% for food in foods reversed %}
<li> {{ food.name }} </li>
{% endfor %}
반복 가능한 객체가 비어 있거나 존재하지 않을 때는 아래와 같이 사용
foods라는 객체가 비어있다면 {% empty %} 구문이 실행된다
{% for food in foods %}
<li> {{ food.name }} </li>
{% empty %}
<li> There is no food. </li>
{% endfor %}
o if
{% if value1 %} ~ {% elif value2 %} ~ {% else %} ~ {% endif %}
파이썬에서 사용하던 조건문 형태와 비슷하다.
{% if hungry %}
<p> Let's eat! </p>
{% elif sleepy %}
<p> You need some coffee. </p>
{% else %}
<p> Go back to work. </p>
{% endif %}
o with
{% with value1=value2 %} ~ {% endwith %}
복잡한 변수가 있을 때 '별명'을 붙이기 위해 사용한다. with 구문 내에서는 value1을 value2 대신 사용할 수 있다.
Django 공식문서
https://docs.djangoproject.com/en/2.2/ref/templates/builtins/#ref-templates-builtins-tags
Built-in template tags and filters | Django documentation | Django
Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate
docs.djangoproject.com
사용자 정의 필터와 태그
https://docs.djangoproject.com/en/2.2/howto/custom-template-tags/