해결됨: 두 개의 base.html을 확장합니다.

마지막 업데이트 : 09/18/2023

웹 개발을 다룰 때 대부분의 개발자가 접하게 되는 중요한 요소 중 하나는 웹 사이트 전체에 동일한 모양과 느낌을 제공하는 것입니다. 이러한 일관성을 달성하는 가장 효율적인 방법 중 하나는 신속한 개발을 촉진하는 고급 Python 웹 프레임워크인 Django에서 기본 템플릿이나 base.html을 사용하는 것입니다. Drupal은 상속 개념을 최대한 활용하고 기본 템플릿을 여러 하위 템플릿으로 확장하는 메커니즘을 제공합니다.

웹사이트 전반에 걸쳐 일관된 디자인 요소를 갖는 문제를 해결하려면 두 개의 기본 템플릿을 확장하는 것이 편리할 수 있습니다. 기본 템플릿에는 웹 애플리케이션 전체에서 일정하게 유지되는 HTML 골격 구조가 포함되어 있습니다. 하위 템플릿에는 페이지마다 다른 개별 웹 페이지의 콘텐츠가 포함되어 있습니다. 이러한 하위 템플릿은 템플릿 상속을 사용하여 상위 기본 템플릿의 속성을 상속합니다.

이제 문제와 관련된 코드에 대한 단계별 설명을 살펴보겠습니다.

샘플 기본 템플릿은 다음과 같이 정의할 수 있습니다.

<!DOCTYPE html>
<html lang="en">
<head>
    {% block head %}
    <title>My Site</title>
    {% endblock %}
</head>
<body>
    {% block content %}
    {% endblock %}
</body>
</html>

그런 다음 base.html은 다음과 같이 하위 템플릿에 의해 확장될 수 있습니다.

{% extends "base.html" %}

{% block head %}
    <title>My Page</title>
{% endblock %}

{% block content %}
    <h1>Welcome!</h1>
    <p>Here is your content...</p>
{% endblock %}

이는 단일 기본 템플릿을 확장하는 것입니다. 하지만 확장할 기본 템플릿이 두 개 있다면 어떻게 될까요? Python은 다중 상속을 직접 지원하지 않기 때문에 상황이 약간 까다로워집니다.

여러 기본 템플릿에 대한 해결 방법

비결은 콘텐츠를 여러 섹션이나 블록으로 나누는 것입니다. 다음은 블록을 사용하여 두 개의 기본 템플릿을 확장하는 방법에 대한 예입니다.

{% block content %}
    {% block content_one %}
    {% endblock %}

    {% block content_two %}
    {% endblock %}
{% endblock %}

여기서 기본 템플릿의 'content' 블록은 'content_one'과 'content_two'라는 두 개의 다른 블록으로 더 나뉩니다. 다양한 기본 템플릿이 이러한 블록을 확장할 수 있습니다.

Python 라이브러리: Django

Python을 사용한 웹 개발에 있어서 Django는 가장 인기 있고 강력한 Python 웹 프레임워크입니다. 이는 구성 요소의 재사용성을 장려하는 DRY(Don't Repeat Yourself) 원칙을 따릅니다. Django 프레임워크의 일부인 Django 템플릿 엔진은 Python의 가치를 웹으로 확장할 수 있는 프런트 엔드 웹 개발을 위한 기본적이면서도 강력한 도구입니다.

결론적으로 Django에서는 프레임워크가 다중 상속을 직접 지원하지 않지만 두 개의 기본 템플릿을 확장하는 것이 가능합니다. 핵심은 콘텐츠를 다양한 기본 템플릿이 확장할 수 있는 여러 블록으로 분할하는 것입니다. 이는 문제에 대한 가장 효과적인 해결 방법이며 템플릿에 재사용성을 제공하여 코드를 보다 효율적이고 관리하기 쉽게 만듭니다.

참고: Django 템플릿 엔진은 Python에서 일부 구문을 차용한 DTL(Django 템플릿 언어)이라는 언어를 사용하지만 그 자체는 Python 코드가 아닙니다.

관련 게시물: