{"title":"How to override templates","version":"5.0","locale":"pt-br","docname":"howto/overriding-templates","url":"/pt-br/5.0/howto/overriding-templates/","canonical":"https://djangodocs.dev/pt-br/5.0/howto/overriding-templates/","summary":"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…","html":"<h1>How to override templates<a class=\"heading-anchor\" href=\"#how-to-override-templates\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>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 <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.admin</span></code> Você pode colocar os templates sobrescritos no seu diretório de templates ou em um diretório de templates de aplicação.</p>\n<p>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, <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">:settings:`DIRS &lt;TEMPLATES-DIRS&gt;`</span></a> é procurado antes de <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">:settings:`APP_DIRS &lt;TEMPLATES-APP_DIRS&gt;`</span></a>.</p>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">Ver também</p>\n<p>Leia <a class=\"reference internal\" href=\"/pt-br/5.0/ref/forms/renderers/#overriding-built-in-widget-templates\"><span class=\"std std-ref\">Overriding built-in widget templates</span></a> se você estiver procurando fazer isso.</p>\n</aside>\n<section id=\"overriding-from-the-project-s-templates-directory\">\n<h2>Sobrescrevendo do diretório de templates do projeto.<a class=\"heading-anchor\" href=\"#overriding-from-the-project-s-templates-directory\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Primeiro, iremos explorar a sobrescrita de templates criando templates de substituição no seu diretório de templates do projeto.</p>\n<p>Vamos dizer que você esteja tentado sobrescrever os templates de uma aplicação de terceiros chamada <code class=\"docutils literal notranslate\"><span class=\"pre\">blog</span></code>, que provê os templates <code class=\"docutils literal notranslate\"><span class=\"pre\">blog/post.html</span></code> e <code class=\"docutils literal notranslate\"><span class=\"pre\">blog/list.html</span></code>. As configurações relevantes do seu projeto irão parecer com:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">pathlib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Path</span>\n\n<span class=\"n\">BASE_DIR</span> <span class=\"o\">=</span> <span class=\"n\">Path</span><span class=\"p\">(</span><span class=\"vm\">__file__</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">resolve</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">parent</span><span class=\"o\">.</span><span class=\"n\">parent</span>\n\n<span class=\"n\">INSTALLED_APPS</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"o\">...</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;blog&quot;</span><span class=\"p\">,</span>\n    <span class=\"o\">...</span><span class=\"p\">,</span>\n<span class=\"p\">]</span>\n\n<span class=\"n\">TEMPLATES</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;BACKEND&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.template.backends.django.DjangoTemplates&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;DIRS&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"n\">BASE_DIR</span> <span class=\"o\">/</span> <span class=\"s2\">&quot;templates&quot;</span><span class=\"p\">],</span>\n        <span class=\"s2\">&quot;APP_DIRS&quot;</span><span class=\"p\">:</span> <span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"c1\"># ...</span>\n    <span class=\"p\">},</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>A configuração <a class=\"reference internal\" href=\"/pt-br/5.0/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">TEMPLATES</span></code></a> e <code class=\"docutils literal notranslate\"><span class=\"pre\">BASE_DIR</span></code> irá existir se você tiver criado o seu projeto usando o template padrão de projeto. A configuração que precisa ser modificada é <a class=\"reference internal\" href=\"/pt-br/5.0/ref/settings/#std-setting-TEMPLATES-DIRS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DIRS</span></code></a>.</p>\n<p>Essas configurações assumem que você tenha um diretório <code class=\"docutils literal notranslate\"><span class=\"pre\">templates</span></code> na raiz do seu projeto. Para sobrescrever os templates para a aplicação <code class=\"docutils literal notranslate\"><span class=\"pre\">blog</span></code>, crie um diretório no diretório <code class=\"docutils literal notranslate\"><span class=\"pre\">templates</span></code>, e adicione os arquivos de template nessa pasta recém criada.</p>\n<div class=\"code-block\" data-language=\"none\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">None</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"None code\"><code>templates/\n    blog/\n        list.html\n        post.html\n</code></pre></div>\n<p>O carregador de template primeiro procura por templates no diretório <code class=\"docutils literal notranslate\"><span class=\"pre\">DIRS</span></code>. Quando as views na aplicação <code class=\"docutils literal notranslate\"><span class=\"pre\">blog</span></code> pedirem pelos templates <code class=\"docutils literal notranslate\"><span class=\"pre\">blog/post.html```e</span> <span class=\"pre\">``blog/list.html</span></code>, o carregador irá retornar os arquivos que você acabou de criar.</p>\n</section>\n<section id=\"overriding-from-an-app-s-template-directory\">\n<h2>Sobrescrevendo de um diretório de template de aplicação.<a class=\"heading-anchor\" href=\"#overriding-from-an-app-s-template-directory\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>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.</p>\n<p>Primeiro, tenha certeza que as suas configurações de template estão verificando dentro dos diretórios de aplicação:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">TEMPLATES</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"p\">{</span>\n        <span class=\"c1\"># ...</span>\n        <span class=\"s2\">&quot;APP_DIRS&quot;</span><span class=\"p\">:</span> <span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"c1\"># ...</span>\n    <span class=\"p\">},</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Se você quer colocar as sobrescritas de templates em uma aplicação chamada <code class=\"docutils literal notranslate\"><span class=\"pre\">myapp</span></code> e os templates a serem sobrescritos são chamados <code class=\"docutils literal notranslate\"><span class=\"pre\">blog/list.html</span></code> e <code class=\"docutils literal notranslate\"><span class=\"pre\">blog/post.html</span></code>, então sua estrutura de diretório será parecida com isso:</p>\n<div class=\"code-block\" data-language=\"none\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">None</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"None code\"><code>myapp/\n    templates/\n        blog/\n            list.html\n            post.html\n</code></pre></div>\n<p>Com a configuração <a class=\"reference internal\" href=\"/pt-br/5.0/ref/settings/#std-setting-TEMPLATES-APP_DIRS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">APP_DIRS</span></code></a> definida como <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, o carregador de templates irá procurar no diretório de templates de aplicação e encontrar os templates.</p>\n</section>\n<section id=\"extending-an-overridden-template\">\n<span id=\"id1\"></span><h2>Extending an overridden template<a class=\"heading-anchor\" href=\"#extending-an-overridden-template\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>With your template loaders configured, you can extend a template using the\n<a class=\"reference internal\" href=\"/pt-br/5.0/ref/templates/builtins/#std-templatetag-extends\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">extends</span> <span class=\"pre\">%}</span></code></a> template tag whilst at the same time overriding\nit. This can allow you to make small customizations without needing to\nreimplement the entire template.</p>\n<p>For example, you can use this technique to add a custom logo to the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">admin/base_site.html</span></code> template:</p>\n<blockquote>\n<div><figure class=\"code-block code-block-captioned\" data-language=\"html+django\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">templates/admin/base_site.html</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code> <span class=\"cp\">{%</span> <span class=\"k\">extends</span> <span class=\"s2\">&quot;admin/base_site.html&quot;</span> <span class=\"cp\">%}</span>\n\n <span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">branding</span> <span class=\"cp\">%}</span>\n     <span class=\"p\">&lt;</span><span class=\"nt\">img</span> <span class=\"na\">src</span><span class=\"o\">=</span><span class=\"s\">&quot;link/to/logo.png&quot;</span> <span class=\"na\">alt</span><span class=\"o\">=</span><span class=\"s\">&quot;logo&quot;</span><span class=\"p\">&gt;</span>\n     <span class=\"cp\">{{</span> <span class=\"nb\">block</span><span class=\"nv\">.super</span> <span class=\"cp\">}}</span>\n <span class=\"cp\">{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span>\n</code></pre></figure>\n</div></blockquote>\n<p>Key points to note:</p>\n<ul class=\"simple\">\n<li><p>The example creates a file at <code class=\"docutils literal notranslate\"><span class=\"pre\">templates/admin/base_site.html</span></code> that uses\nthe configured project-level <code class=\"docutils literal notranslate\"><span class=\"pre\">templates</span></code> directory to override\n<code class=\"docutils literal notranslate\"><span class=\"pre\">admin/base_site.html</span></code>.</p></li>\n<li><p>The new template extends <code class=\"docutils literal notranslate\"><span class=\"pre\">admin/base_site.html</span></code>, which is the same template\nas is being overridden.</p></li>\n<li><p>The template replaces just the <code class=\"docutils literal notranslate\"><span class=\"pre\">branding</span></code> block, adding a custom logo, and\nusing <code class=\"docutils literal notranslate\"><span class=\"pre\">block.super</span></code> to retain the prior content.</p></li>\n<li><p>The rest of the template is inherited unchanged from\n<code class=\"docutils literal notranslate\"><span class=\"pre\">admin/base_site.html</span></code>.</p></li>\n</ul>\n<p>This technique works because the template loader does not consider the already\nloaded override template (at <code class=\"docutils literal notranslate\"><span class=\"pre\">templates/admin/base_site.html</span></code>) when\nresolving the <code class=\"docutils literal notranslate\"><span class=\"pre\">extends</span></code> tag. Combined with <code class=\"docutils literal notranslate\"><span class=\"pre\">block.super</span></code> it is a powerful\ntechnique to make small customizations.</p>\n</section>","rootId":"how-to-override-templates","toc":[{"title":"Sobrescrevendo do diretório de templates do projeto.","anchor":"overriding-from-the-project-s-templates-directory","children":[]},{"title":"Sobrescrevendo de um diretório de template de aplicação.","anchor":"overriding-from-an-app-s-template-directory","children":[]},{"title":"Extending an overridden template","anchor":"extending-an-overridden-template","children":[]}],"breadcrumbs":[{"docname":"howto/index","title":"Guias de “como fazer”","url":"/pt-br/5.0/howto/"}],"prev":{"docname":"howto/outputting-pdf","title":"How to create PDF files","url":"/pt-br/5.0/howto/outputting-pdf/"},"next":{"docname":"howto/static-files/index","title":"How to manage static files (e.g. images, JavaScript, CSS)","url":"/pt-br/5.0/howto/static-files/"},"formats":{"html":"/pt-br/5.0/howto/overriding-templates/","markdown":"/pt-br/5.0/howto/overriding-templates.md","json":"/pt-br/5.0/howto/overriding-templates.json"},"source":"https://github.com/django/django/blob/stable/5.0.x/docs/howto/overriding-templates.txt","official":"https://docs.djangoproject.com/pt-br/5.0/howto/overriding-templates/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}