템플릿 재정의 방법

프로젝트에서 타사 애플리케이션이든 ``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