テンプレートのオーバーライド—Djangoドキュメント

提供:Dev Guides
< DjangoDjango/docs/2.2.x/howto/overriding-templates
移動先:案内検索

テンプレートのオーバーライド

プロジェクトでは、サードパーティアプリケーションであろうとdjango.contrib.adminなどの寄稿アプリケーションであろうと、別のDjangoアプリケーションのテンプレートをオーバーライドしたい場合があります。 テンプレートオーバーライドは、プロジェクトのテンプレートディレクトリまたはアプリケーションのテンプレートディレクトリに配置できます。

両方にオーバーライドが含まれているアプリとプロジェクトのテンプレートディレクトリがある場合、デフォルトのDjangoテンプレートローダーは最初にプロジェクトレベルのディレクトリからテンプレートを読み込もうとします。 言い換えると、 :setting: `DIRS ` 前に検索されます :setting: `APP_DIRS `

も参照してください

組み込みウィジェットテンプレートのオーバーライドをお読みになりたい場合は、こちらをご覧ください。


プロジェクトのテンプレートディレクトリからオーバーライドする

まず、プロジェクトのテンプレートディレクトリに置換テンプレートを作成して、テンプレートをオーバーライドする方法について説明します。

テンプレートblog/post.htmlおよびblog/list.htmlを提供するblogと呼ばれるサードパーティアプリケーションのテンプレートをオーバーライドしようとしているとしましょう。 プロジェクトに関連する設定は次のようになります。

import os

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

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

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        ...
    },
]

デフォルトのプロジェクトテンプレートを使用してプロジェクトを作成した場合、:setting: `TEMPLATES` 設定とBASE_DIRはすでに存在します。 変更が必要な設定は :setting: `DIRS `

これらの設定は、プロジェクトのルートにtemplatesディレクトリがあることを前提としています。 blogアプリのテンプレートを上書きするには、templatesディレクトリにフォルダーを作成し、そのフォルダーにテンプレートファイルを追加します。

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

:setting: `APP_DIRS ` に設定True 、テンプレートローダーはアプリのテンプレートディレクトリを調べてテンプレートを見つけます。