[Django] Template 상속

    많은 HTML이 있는데, 모든 HTML파일에 모두 bootstrap을 적용하고 싶을 때, 하나하나 CDN을 작성해줘야할까?

    반복작업이 너무 많은데 일일히 복붙을 해야하나?

    → 이런 경우에 Template 상속을 이용한다.

     


    Template 상속이란?

    베이스가 되는 HTML파일을 하나 만들어 두고, 그 파일안에 페이지들의 공통요소를 작성해놔서
    하위 템플릿들은 상속받아서 반복되는 요소들은 일일히 만들필요가 없게 해주는 시스템

     

    # 상속의 조건

    1. 페이지의 공통요소를 포함

    2. 하위 템플릿이 재정의할 수 있는 공간을 정의

     


    # Template 상속의 요소들

    1. extend tag

    자식(하위) 템플릿이 부모 템플릿을 확장한다는 것을 알리는 역할

    • 반드시 템플릿의 최상단에 작성되어야 함
    • 2개 이상은 사용할 수 없다
    {% extends 'path' %}

     

    2. block tag

    하위 템플릿에서 재정의 할 수 있는 블록을 정의

    • 하위 템플릿에서 부모 템플릿과 다른 부분을 여기에 작성한다.
    {% block name %} {% endblock name %}

     

     


    직접 해보기

    1. 부모 템플릿이 될 base.html파일과 자식 템플릿이 될 greeting.html파일을 만들어 준다.

     

    2. base.html에서 기본형식과 함께, 자식 템플릿에서 달라질 부분인 body에 block tag를 작성해준다.

    content는 block의 이름: 하나의 부모 밑에 여러개의 자식 템플릿이 있을 수 있으므로,

    자식마다 다른 block이 들어갈 때를 생각해서 이름을 만들어 준다.

     

    3. 자식 템플릿에서는 extend tag로 base.html이 부모 템플릿임을 알리고, block tag를 이용해 부모 템플릿과는 다른 부분을 작성한다.

    extend 뒤에는 부모 템플릿의 경로를 써준다.

     

     

     


    base.html을 최상단에 올리기

    (app이 여러개일 때 한번에 사용하기 위해서)

     

    폴더 최상단에 Templates폴더를 만들어주고, 그안에 base.html을 옮기기

     

    이후, settings.py에서 TEMPLATES항목을 수정해준다.

    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [ BASE_DIR / 'Templates'],	# 여기 변경
            # ... 생략

     

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

    [Django] form활용: throw & catch  (0) 2023.09.13
    [Django] 요청과 응답(form)  (0) 2023.09.13
    [Django] Template System  (0) 2023.09.13
    [Django] MTV 디자인 패턴  (0) 2023.09.12
    [Django] Django 프로젝트 만들기  (0) 2023.09.12

    댓글