본문 바로가기

Python/Django

[Django] Django - 상속(block)

이번에는 상속(block)에 대해서 알아보겠습니다.

 

반복되는 html 코드를 block 으로 처리하여 반복적으로 사용가능하게 코딩할 수 있다.

일반적인 구조는 프로젝트 레벨에서 base.html 파일을 갖고, 애플리케이션 레벨의 base.html파일에서 프로젝트 레벨의 base.html을 확장하거나, 상속하는 구조로 구성한다.

 

 

 

템플릿과 프로젝트 디렉토리를 등록하기 위해 settings를 편집하고, 그 다음엔 템플릿 상속에 대해 알아보겠습니다.

 

 

1. 프로젝트 레벨에서 templates 폴더를 생성하고 여기에 프로젝트 레벨의 base.html 파일을 만든다.

./my_site/templates/base.html

 

{% comment %} ./my_site/templates/base.html {% endcomment %}
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>THIS IS ABOVE THE BLOCK IN BASE.HTML</h1>
    {% block content %}
    
    {% endblock content %}
    <h1>THIS IS BELOW THE BLOCK IN BASE.HTML</h1>
</body>
</html>

 

 

2. 상속받을 html 파일 만들기 - ./my_site/my_app/templates/my_app/example.html

주의사항은 "{% extends "base.html" %}" 부분이 최상단에 있어야 한다. 윗 부분에 주석이 있으면 오류 발생함. 

 

{% extends "base.html" %}

{% block content %}
    <h2>Example HTML template</h2>
    <h2>This is inside the block in EXAMPLE.HTML</h2>
{% endblock content %}

 

 

3. 프로젝트 레벨의 settings.py 설정하여 프로젝트 레벨의 templates 위치를 등록한다.

 

 

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')], # <=== 설정부분
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

 

 

결과 화면

 

 

 

 

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

[Django] Django - 정적 파일  (0) 2022.10.27
[Django] Django - 사용자 정의 오류 템플릿  (0) 2022.10.27
[Django] Django - Tags(url)  (0) 2022.10.27
[Django] Django - Tags(for, if)  (0) 2022.10.27
[Django] Django - filter  (0) 2022.10.27