템플릿(template) 언어
django의 템플릿 언어(template language)는 강력함과 편리함 사이의 균형을 잡고자 설계되었다.
템플릿 언어를 사용하면 HTML 작업을 훨씬 수월하게 할 수 있다.
파이썬처럼 일부 프로그래밍 구조(if, for 등)를 사용할 수 있지만 이건 Python 코드로 실행되는 것이 아니다.
django template에서 사용하는 built-in template system, 파이썬 변수 및 문법을 html 안에서 쓸 수 있도록 장고에서 제공해주는 언어이기 때문에 html과도 파이썬과도 조금 다르다.
템플릿 언어는 변수, 필터, 태그, 주석 등의 기능을 제공한다.
1. 변수, variables
{{ variables }}
템플릿변수를 사용하면 뷰에서 템플릿으로 객체를 전달할 수 있다.
변수명은 영,숫자와 밑줄(_)의 조합으로 구성될 수 있으나, 밑줄로는 시작 할 수 없다.
변수명에 공백이나 구두점 문자를 사용할 수는 없다.
dot(.)를 사용하여 변수 속성에 접근 가능하다.
2. 필터, filters
{{ variable|filter }}
템플릿필터는 변수의 값을 특정 형식으로 변환할 때 사용한다.
변수 다음에 파이프(|)를 넣은 다음 적용하고자 하는 필터를 명시한다.
여러 개의 필터를 연속적으로 사용할 수도 있다.
몇몇 필터는 : 문자를 통해 인자를 취한다.
3. 태그, tags
{% tag %}
HTML자체는 프로그래밍 로직을 구현할 수 없지만, 템플릿 태그를 사용하면 if문, for문처럼 흐름을 제어할 수 있다.
일부 태그는 시작과 종료 태그가 필요하다. {% tag %} ... {% endtag %}
4. 코멘트, comments
{# comments #} / {% comment %} ... {% endcomment %}
HTML 문서 상에서 주석이 필요할 때 사용한다.
장고에서는 두 가지 형식의 코멘트 형식을 제공한다.
- 한 줄 주석
- {# 주석 내용 #}
- 여러 줄 주석
- {% comment %} 주석 내용 {% endcomment %}
* 참고 : Django 템플릿 언어(공식 한글문서)
템플릿 상속, Template inheritance
템플릿 상속은 기본적으로 코드의 재사용성에 초점
html 문서 중 기본 뼈대가 되는 문서를 기본 템플릿(base.html)으로 정하고, 이는 공통의 코드이므로 다른 문서에서 기본 템플릿의 코드가 필요하면 상속하여 가져다 쓰는 것이다.
base.html 템플릿은 모든 템플릿이 상속해야 하는 템플릿으로 표준 html틀을 갖춘 문서가 된다.
base.html 생성
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
모든 페이지에 공통으로 들어갈 요소
{% block content %}
base.html을 상속한 템플릿에서 구현해야 하는 영역
{% endblock %}
</body>
</html>
* base.html을 생성한 곳을 기본 경로 외 추가 경로 설정이 필요하다!
# settings.py
TEMPLATES = [
{
...,
'DIRS': [BASE_DIR / 'templates'],
...,
]
상속 받기
각 html 파일 최상단(즉, 2개 이상 사용할 수 없다.)에 base.html 을 상속 받는다는 것을 명시해준다.
extends tag : {% extends 'base.html' %}
하위 템플릿이 채울 수 있는 공간
가독성을 높이기 위해 선택적으로 {% endblock %} 태그에 이름 지정
block tag : {%blockcontent%} ...{%endblockcontent%}
{% extends 'base.html' %}
{% block content %}
<div>
하위 템플릿에 각각 적용할 내용
</div>
{% endblock %}
'Web > django' 카테고리의 다른 글
03_django project, 장고 프로젝트 (0) | 2021.09.05 |
---|---|
01_django install, 장고 설치하기 (0) | 2021.09.05 |
00_django intro, 장고 소개하기 (0) | 2021.09.05 |