Django

[Django 기초] Template Language

dio-han 2021. 12. 4. 00:56

 

템플릿 언어(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/