템플릿을 재정의

프로젝트에서 타사 애플리케이션이든 ``django.contrib.admin》과 같은 기여 애플리케이션이든 다른 Django 애플리케이션의 템플릿을 재정의하는 것이 좋습니다. 프로젝트의 템플릿 디렉토리 또는 응용프로그램의 템플리트 디렉토리에 템플리트 재정의를 넣을 수 있습니다.

앱 및 프로젝트 템플릿 디렉터리에 모두 재정의가 포함된 경우 기본 Django 템플릿 로더가 먼저 프로젝트 수준 디렉터리에서 템플릿을 로드하려고 시도합니다. 즉, :설정:〉입니다.DIRS’가 다음 설정 전에 검색됩니다.〉APP_DIRS’입니다.

더 보기

ref:를 읽습니다.그렇게 하려면 붙박이장 같은 것도 있어야죠.

프로젝트의 템플릿 디렉터리에서 재정의합니다.

먼저 프로젝트의 템플릿 디렉터리에 교체 템플릿을 생성하여 템플릿을 재정의하는 방법에 대해 알아봅니다.

당신이 ``blog/post.html》과 《blog/list.html》을 제공하는 《blog》라는 제3자 애플리케이션의 템플릿을 재정의하려고 한다고 가정해 보겠습니다. 프로젝트의 관련 설정은 다음과 같습니다.

from pathlib import Path

BASE_DIR = Path(__file__).resolve().parent.parent

INSTALLED_APPS = [
    ...,
    'blog',
    ...,
]

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR / 'templates'],
        'APP_DIRS': True,
        ...
    },
]

:설정:입니다.기본 프로젝트 템플릿을 사용하여 프로젝트를 생성했다면 템플릿 설정과 ``BASE_DIR》이 이미 존재하게 됩니다. 수정해야 할 설정은 : setting:〉입니다.DIRS입니다.

이러한 설정은 프로젝트의 루트에 《템플릿》 디렉토리를 가지고 있다고 가정합니다. 《블로그》 앱의 템플릿을 재정의하려면 《템플릿》 디렉터리에 폴더를 생성한 다음 템플릿 파일을 해당 폴더에 추가하십시오.

templates/
    blog/
        list.html
        post.html

템플릿 로더는 먼저 《DIRS》 디렉토리에서 템플릿을 찾습니다. 《blog》 앱의 뷰가 《blog/post.html》과 《blog/list.html》 템플릿을 요청하면 로더는 방금 만든 파일을 반환합니다.

앱의 템플릿 디렉토리에서 재정의합니다.

프로젝트의 앱 외부에 위치한 템플릿을 재정의하기 때문에 프로젝트의 템플릿 폴더에 템플릿 재정의를 넣고 첫 번째 방법을 사용하는 것이 더 일반적입니다. 그러나 원하는 경우 앱의 템플릿 디렉터리에 재정의를 넣을 수도 있습니다.

먼저 템플릿 설정이 앱 디렉터리 내에서 확인 중인지 확인합니다.

TEMPLATES = [
    {
        ...,
        'APP_DIRS': True,
        ...
    },
]

《myapp》이라는 앱에 템플릿 재정의를 넣고 재정의할 템플릿 이름을 《blog/list.html》과 《blog/post.html》로 지정하면 디렉터리 구조는 다음과 같습니다.

myapp/
    templates/
        blog/
            list.html
            post.html

설정:을(설정):APP_DIRS가 《참》으로 설정되면 템플릿 로더가 앱의 템플릿 디렉토리를 검색하여 템플릿을 찾습니다.

재정의된 템플릿을 확장합니다.

템플릿 로더를 구성한 경우 :ttag:〉{% extenses %}〉 템플릿 태그를 사용하여 템플릿을 확장하는 동시에 재정의할 수 있습니다. 이렇게 하면 전체 템플릿을 다시 구현할 필요 없이 소규모 사용자 지정을 수행할 수 있습니다.

예를 들어 이 기술을 사용하여 〈〉admin/base_site.html〉 템플릿에 사용자 정의 로고를 추가할 수 있습니다.

templates/admin/base_site.html
 {% extends "admin/base_site.html" %}

 {% block branding %}
     <img src="link/to/logo.png" alt="logo">
     {{ block.super }}
 {% endblock %}

주요 내용은 다음과 같습니다.

  • 이 예에서는 구성된 프로젝트 수준의 ``템플릿》 디렉토리를 사용하여 ``admin/base_site.html》을 재정의하는 《templates/admin/base_site.html》에 파일을 생성합니다.
  • 새 템플릿은 《admin/base_site.html》을 확장하며, 이는 재정의되는 템플릿과 동일합니다.
  • 템플릿은 단지 《브랜드》 블록을 대체하고 맞춤형 로고를 추가하고 《블록》을 사용합니다.이전 내용을 보존할 수 있습니다.
  • 템플릿의 나머지 부분은``admin/base_site.html``.에서 변경되지 않은 상태로 상속됩니다.

이 기술은 템플릿 로더가 ``확장》 태그를 결정할 때 이미 로드된 오버라이드 템플릿(《templates/admin/base_site.html》)을 고려하지 않기 때문에 작동합니다. 《블록》과 결합합니다.Superdown은 작은 커스터마이징을 만드는 강력한 기술입니다.

Back to Top