Study/Django

[Django] 템플릿 언어

taecongs 2023. 9. 11. 12:17

Django 공부하기 ✨


템플릿(templates)란 무엇인가?

  • Django에서 템플릿이란 어떤 텍스트 파일을 의미한다.
  • 템플릿을 통해 HTML, XML, CSV 등 어떠한 텍스트 기반 포맷의 파일도 생성할 수 있다.
  • 템플릿은 렌더링시 실제 데이터로 대체되는 변수를 가지며 그 안의 로직을 통제 가능한 태그도 포함할 수 있다.
  • 템플릿 안에서 변수는 {{ variable }}과 같이 두 개의 중괄호로 감싸 표현한다.

 

(1) 템플릿(templates) 상속

  • 상속을 통해 전체 뼈대를 짜두고 각 부분을 block으로 정의해서 해당 템플릿을 상속하는 템플릿이 그 부분을 오버라이드 할 수 있게 해준다.
  • 부모 템플릿을 상속하는 템플릿은 extends 태그를 이용해 부모 템플릿을 오버라이드하고 상속자 템플릿의 내용에 따라 부모 템플릿의 block 부분을 대체한다.

 

(1) 부모 템플릿
<!DOCTYPE html>
<html lang="ko">
<head>
    <link rel="stylesheet" href="style.css">
    <title>{% block title %}My amazing site{% endblock %}</title>
</head>

<body>
    <div id="sidebar">
        {% block sidebar %}
        <ul>
            <li><a href="/">Home</a></li>
            <li><a href="/blog/">Blog</a></li>
        </ul>
        {% endblock %}
    </div>

    <div id="content">
        {% block content %}{% endblock %}
    </div>
</body>
</html>

 

(2) 상속 템플릿
{% extends "base.html" %}

{% block title %}My amazing blog{% endblock %}

{% block content %}
    {% for entry in blog_entries %}
        <h2>{{ entry.title }}</h2>
        <p>{{ entry.body }}</p>
    {% endfor %}
{% endblock %}

 

(3) 결과
<!DOCTYPE html>
<html lang="ko">
<head>
    <link rel="stylesheet" href="style.css">
    <title>My amazing blog</title>
</head>

<body>
    <div id="sidebar">
        <ul>
            <li><a href="/">Home</a></li>
            <li><a href="/blog/">Blog</a></li>
        </ul>
    </div>

    <div id="content">
        <h2>Entry one</h2>
        <p>This is my first entry.</p>

        <h2>Entry two</h2>
        <p>This is my second entry.</p>
    </div>
</body>
</html>

 

(4) 템플릿 상속 시 유의 할 점
  • {% extends %} 태그는 상속자 템플릿의 첫 태그여야 상속이 발생한다.
  • 템플릿 작성 시 반복되는 사항이 발생하면 block화 하는 것이 좋다.
  • 같은 템플릿 안에서는 같은 이름을 갖는 block 태그는 쓸 수 없다.

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

[Django] 데이터 저장 (10)  (0) 2023.09.12
[Django] URL 별칭 (9)  (0) 2023.09.12
[Django] 조회와 템플릿 (8)  (0) 2023.09.11
[Django] 관리자 사용하기 (7)  (0) 2023.09.08
[Django] 모델 (6)  (0) 2023.09.08