# documentação Django 3.1.9.dev

# Sobrescrevendo templates

No seu projeto, você pode querer sobrescrever um template em outra aplicação Django, seja ela uma aplicação de terceiros ou uma aplicação contrib, como `django.contrib.admin` Você pode colocar os templates sobrescritos no seu diretório de templates ou em um diretório de templates de aplicação.

Se você tem diretórios de templates de projeto e aplicação em que ambos contenham sobrescritas, o carregador de templates padrão do Django tentará carregar o template a partir do diretório de nível de projeto primeiro. Em outras palavras, :settings:`DIRS <TEMPLATES-DIRS>` é procurado antes de :settings:`APP_DIRS <TEMPLATES-APP_DIRS>`.

Ver também

Leia Overriding built-in widget templates se você estiver procurando fazer isso.

## Sobrescrevendo do diretório de templates do projeto.

Primeiro, iremos explorar a sobrescrita de templates criando templates de substituição no seu diretório de templates do projeto.

Vamos dizer que você esteja tentado sobrescrever os templates de uma aplicação de terceiros chamada `blog`, que provê os templates `blog/post.html` e `blog/list.html`. As configurações relevantes do seu projeto irão parecer com:

    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,
            ...
        },
    ]

A configuração `TEMPLATES` e `BASE_DIR` irá existir se você tiver criado o seu projeto usando o template padrão de projeto. A configuração que precisa ser modificada é `DIRS`.

Essas configurações assumem que você tenha um diretório `templates` na raiz do seu projeto. Para sobrescrever os templates para a aplicação `blog`, crie um diretório no diretório `templates`, e adicione os arquivos de template nessa pasta recém criada.

    templates/
        blog/
            list.html
            post.html

O carregador de template primeiro procura por templates no diretório `DIRS`. Quando as views na aplicação `blog` pedirem pelos templates `blog/post.html```e ``blog/list.html`, o carregador irá retornar os arquivos que você acabou de criar.

## Sobrescrevendo de um diretório de template de aplicação.

Já que você está sobrescrevendo templates localizados fora de uma de suas aplicações do projeto, é mais comum usar o primeiro método e adicionar templates que sobrescrevem na pasta de templates do projeto. Se você preferir, entretanto, é possível colocar as sobrescritas em um diretório de templates da aplicação.

Primeiro, tenha certeza que as suas configurações de template estão verificando dentro dos diretórios de aplicação:

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

Se você quer colocar as sobrescritas de templates em uma aplicação chamada `myapp` e os templates a serem sobrescritos são chamados `blog/list.html` e `blog/post.html`, então sua estrutura de diretório será parecida com isso:

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

Com a configuração `APP_DIRS` definida como `True`, o carregador de templates irá procurar no diretório de templates de aplicação e encontrar os templates.

## Extending an overridden template

With your template loaders configured, you can extend a template using the `{% extends %}` template tag whilst at the same time overriding it. This can allow you to make small customizations without needing to reimplement the entire template.

For example, you can use this technique to add a custom logo to the `admin/base_site.html` template:

> templates/admin/base_site.html

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

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

Key points to note:

- The example creates a file at `templates/admin/base_site.html` that uses the configured project-level `templates` directory to override `admin/base_site.html`.
- The new template extends `admin/base_site.html`, which is the same template as is being overridden.
- The template replaces just the `branding` block, adding a custom logo, and using `block.super` to retain the prior content.
- The rest of the template is inherited unchanged from `admin/base_site.html`.

This technique works because the template loader does not consider the already loaded override template (at `templates/admin/base_site.html`) when resolving the `extends` tag. Combined with `block.super` it is a powerful technique to make small customizations.