DevYoon

[Django] Template 본문

Web/Django

[Django] Template

gimewn 2022. 4. 10. 04:02

Django Template

1️⃣ DTL (Django Template Language)

  • Django template에서 사용하는 built-in template system
  • 조건, 반복, 변수 치환, 필터 등의 기능을 제공
  • Python처럼 일부 프로그래밍 구조(if, for 등)를 사용할 수 있지만, 해당 python 코드로 실행되는 것은 아님

DTL Syntax

1️⃣ {{ Variable }}

  • render()를 통해 views.py에서 정의한 변수를 template 파일로 넘겨 사용하는 것
  • 변수명은 영어, 숫자, 밑줄(_) 조합으로 구성될 수 있으나 밑줄로는 시작 불가능
  • 공백이나 구두점 문자 사용 불가능
  • (.)를 사용하여 변수 속성에 접근 가능 {{ 변수명.속성 }}
  • render()의 세 번째 인자로 {'key':value}와 같이 딕셔너리 형태로 넘겨주며, 여기서 정의한 key에 해당하는 문자열이 template에서 사용 가능한 변수명이 됨

2️⃣ {{ variable|Filters }}

  • 표시할 변수를 수정할 때 사용
  • chained가 가능하며, 일부 필터는 인자를 받기도 함
  • ex) name 변수를 모두 소문자로 ➡️ {{ name|lower }}

3️⃣ {% Tags %}

  • 출력 테스트를 만들거나, 반복 또는 논리를 수행하여 제어 흐름을 만드는 등 변수보다 복잡한 일을 수행
  • 일부 태그는 시작과 종료 태그가 필요 ➡️ if&endif, for&endfor

4️⃣ {# Comments #}

  • Django Template에서 라인의 주석을 표현하기 위해 사용
  • 한 줄 주석에만 사용 가능
  • 여러 줄 주석은 {% comment %} 내용 {% endcomment %}

2️⃣ Template Inheritance (템플릿 상속)

  • 코드의 재사용성에 초점

  • 템플릿 상속을 사용하면 사이트의 모든 공통 요소를 포함하고, 하위 템플릿이 재정의(override) 할 수 있는 블록을 정의하는 기본 skeleton 템플릿을 만들 수 있음

    {% extends '부모 템플릿명' %}
    • 자식(하위) 템플릿이 부모 템플릿을 확장한다는 것을 알림
    • 반드시 템플릿 최상단에 작성되어야 함
    {% block content %} {% endblock %}
    • 하위 템플릿에서 재지정(overridden)할 수 있는 블록을 정의
    • 하위 템플릿이 채울 수 있는 공간
  • settings.py의 TEMPLATES에 app의 templates 디렉토리 외의 템플릿 추가 경로 설정

    TEMPLATES [ {
         'DIRS': [BASE_DIR / 'templates'],
     } ]

3️⃣ Template Tag - Include

  • 템플릿을 로드하고 현재 페이지로 렌더링

  • 템플릿 내에 다른 템플릿을 포함(including)하는 방법

    {% include '템플릿명.html' %}