Tiny Finger Point Hand With Heart
본문 바로가기
Python/Django

[Django] Template Language

by yoondii 2023. 1. 29.
728x90
반응형

장고에는 템플릿 언어라는 것이 있는데 이것을 잘 활용하면 원하는 값을 출력하여 사용할 수 있다.

크게는 4개로 나눌 수 있다.

 

1. 템플릿 변수  {{변수명}}   {{변수명.속성}}

: 우리가 지정한 데이터로 변환 , view에서 넘겨 받은 값으로 변환

모델에서 지정한 속성을 지정할 수 있다.

 

2. 템플릿 태그  {% 태그 %} {% end태그 %}

: 템플릿 작성에 로직을 사용/ 반복/조건/상속

end태그가 꼭 필요한 태그들이 있다. for,if,block 등

 

3. 템플릿 필터  {{변수명 | 필터}}

: 템플릿 변수를 특정 형식으로 변환

 

4. 템플릿 주석 {# 주석 #}

: 템플릿 언어의 주석처리를 담당

 


템플릿 변수 (Template Variable)

{{ variable }}

템플릿 변수는 템플릿이 렌더될 때 해당 변수가 의미하는 값으로 변환된다.

뷰(View)에서 가공한 데이터를 템플릿으로 넘겨주면 템플릿에서는 템플릿 변수를 사용해 넘겨받은 데이터에 접근할 수 있다.

템플릿 변수의 점(.) 연산자

템플릿 변수는 점(.)을 사용해서 변수 안쪽 속성에 접근할 수 있다.

user = {"name" : "융디", "coffee" : True}

예를 들어 위와 같은 user 변수가 있다면, user.name으로 "융디"라는 안쪽 값에 접근 할 수 있다.

이와 같은 점(.) 연산자는 다음과 같은 순서로 변수의 안쪽 속성에 접근을 시도한다.

  1. 변수를 사전형(dict)으로 생각하고 점(.) 연산자로 Key값 조회
  2. 변수를 객체로 생각하고 내부 속성값 조회 또는 함수 호출
  3. 변수를 리스트(list)로 생각하고 점(.) 연산자로 Index 조회

Django에서 템플릿의 점 연산자를 만나면 자동으로 위의 경우대로 순서대로 처리하며 알맞은 값으로 변환되지만 내가 접근 하려는 템플릿 변수가 어떤 자료형인지 알고 점(.)연산자를 사용해야지만 예기치 못한 에러를 방지 할 수 있다.


템플릿 필터 (Template Filter)

{{ variable|filter }}

템플릿 변수에 파이프(|)를 쓰고 템플릿 필터를 사용하면 템플릿 변수를 특정 형식으로 변환 할 수 있다.

{{ variable|filter:args }}

일부 필터는 필터 뒤에 인자를 필요로 한다.

Django는 약 60개의 내장 템플릿 필터를 제공하며 개발자가 직접 필터를 정의해서 사용하는 것도 가능하다.

아래는 몇 가지 내장 템플릿 필터이다.

default

참조하는 템플릿 변수가 비어 있거나 불린형 False일 경우 변환되는 값을 지정한다.

{{ variable|default:"coffee" }} 

변수가 비어 있거나 False면 coffee 라는 텍스트로 대체 된다.

capfirst

맨 첫글자를 대문자로 바꿔 준다.

{{ variable|capfirst }}

random

반복 가능한 템플릿 변수에 대해 무작위로 하나를 추출해 변환한다.

{{ variable|random }}

만약 variable이 참조하는 값이 [ "a", "b", "c", "d" ] 인 리스트형이라면 템플릿 변수가 리스트 내의 하나의 원소로 대체 된다.

upper & lower

템플릿 변수를 대문자(upper) 또는 소문자 (lower)로 변환한다.

{{ variable | upper }} , {{ variable | lower }}

ljust & rjust

주어진 길이 내에서 공백을 넣어 왼쪽 정렬(ljust) 또는 오른쪽 정렬(rjust)을 한 문자열로 변환한다.

{{ variable|ljust:"length" }}, {{ variable|rjust:"length" }}

variable이 "yoondii" 일 때 {{ variable|ljust:"10" }} 이라면 "yoondii "이 됩니다.

공백을 표시해서 보면 "yoondii_ _ _ _"이런 형태인거다.

마찬가지로 만약 {{ variable|rjust:"10" }} 이라면 " yoondii"이 된다.


이 밖에도 몇 가지 필터가 더 있는데 모두 외울 필요는 당연히 없고 필요할 때 찾아서 사용하면 된다.

더 많은 템플릿 필터에 대한 정보는 아래 Django 공식 문서를 참고. https://docs.djangoproject.com/en/2.2/ref/templates/builtins/#ref-templates-builtins-filters


템플릿 태그 (Template Tag)

{% tag %}

템플릿 태그는 템플릿을 작성할 때 반복문, 조건문 등의 로직을 사용해서 마치 프로그래밍을 하듯 템플릿을 작성할 수 있게 해줍니다. Django가 기본적으로 제공하는 태그가 있지만, 개발자가 직접 태그를 정의해서 사용할 수도 있다.

{% tag %} ~ {% endtag %}

태그의 형태는 단독으로 사용하는 템플릿 태그와 여는 태그와 닫는 태그가 필요한 템플릿 태그가 있다.

아래는 몇 가지 기본 템플릿 태그다.

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 %}

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 %}

with

{% with value1=value2 %} ~ {% endwith %}

복잡한 변수가 있을 때 '별명'을 붙이기 위해 사용합니다. with 구문 내에서는 value1을 value2 대신 사용할 수 있다.

이 밖에도 몇 가지 템플릿 태그가 더 있는데, 필터와 마찬가지로 필요할 때 찾아서 사용하면 된다.

템플릿 태그에 대한 더 많은 정보는 아래 Django 공식 문서를 참고.

https://docs.djangoproject.com/en/2.2/ref/templates/builtins/#ref-templates-builtins-tags


사용자 정의 필터와 태그

{% load %}를 활용하면 된다.

아래의 공식 문서를 참고.

https://docs.djangoproject.com/en/4.1/howto/custom-template-tags/

728x90
반응형

'Python > Django' 카테고리의 다른 글

[Django] Model Field  (0) 2023.01.30
[Django] 상태 코드(Status Code)  (0) 2023.01.30
[Django] render( )함수  (0) 2023.01.29
[Django] URL Routing  (0) 2023.01.29
[Django] runserver  (0) 2023.01.29

댓글