DTL 에서 부모 템플릿에 있는 값을 그대로 출력하거나 해당 블럭을 통째로 자식 템플릿에서 바꾸고 싶다면 부모에 블럭을 선언하고 기본 값을 같이 넣어 두면 된다.
부모 템플릿에 메뉴가 있는데, 어떤 자식 템플릿에서는 그 메뉴을 없애고 싶다면 머 여러가지 방법이 있겠지만 이 방법이 가장 단순하지 않을 까 싶다.
부모에 블럭을 하나 선언해 둔다. 예제에서는 "Sidenav" 를 선언해 둔다.
보통 선언하자 마자 바로 "{% endblock %}" 을 붙여넣고는 자식에서 이 블럭을 선언해서 사용하기를 기대한다.
아래와 같이 선언된 경우는 자식 템플릿에서 아무런 선언을 하지 않으면 부모껏을 그대로 쓰게 된다. 기본 값을 가지는 셈이 된다.
...
<body>
<!-- Sidenav -->
{% block Sidenav %}
<nav class="sidenav navbar navbar-vertical fixed-left navbar-expand-xs navbar-light bg-white" id="sidenav-main">
<div class="scrollbar-inner">
{% include 'includes/nav.html' %}
</div>
</nav>
{% endblock %}
...
그런데, 특정 자식에서는 이 사이드 메뉴가 필요없어서 보기 싫다면, 그냥 빈 블럭으로 다시 선언하면
몽짱 대치되어서 이 블럭이 없는 것처럼 쓰일 수 있다.
즉, 아래처럼 선언하고 바로 end 로 닫아 버리면 기본값이 출력이 되지 않아 없는 것처럼 할 수 있다는 말.
{% extends 'base.html' %}
{% load static %}
{% block Sidenav %}{% endblock %}
원하는 바를 이루기만 하면 되니깐, 혹시 필요한 경우에 참고들 하시길...
(추가)
적고나서 보니, 부모꺼를 그대로 상속도 받고 자신의 것을 일부 추가 하고 싶을 때가 있다.
이때는 아래 글을 참고하기 바랍니다.
- 부모 템플릿의 {% block %} 안에 있는 내용을 그대로 사용하고 싶다면 자식 템플릿에서 {{block.super}} 변수를 사용하면 됩니다. 부모 템플릿의 내용을 그대로 사용하면서 자식 템플릿에서 내용을 추가하는 경우에 사용 할 수 있습니다.
머 다 되네~~~
Vie Studio 님의 사진, 출처: Pexels