{"title":"Come sovrascrivere i templates","version":"6.1","locale":"it","docname":"howto/overriding-templates","url":"/it/6.1/howto/overriding-templates/","canonical":"https://djangodocs.dev/it/6.1/howto/overriding-templates/","summary":"Nel tuo progetto, puoi voler fare override del template in un’altra applicazione Django, che sia una applicazione di terze parti o una applicazione contrib come…","html":"<h1>Come sovrascrivere i templates<a class=\"heading-anchor\" href=\"#how-to-override-templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Nel tuo progetto, puoi voler fare override del template in un’altra applicazione Django, che sia una applicazione di terze parti o una applicazione contrib come <code class=\"docutils literal notranslate\">django.contrib.admin</code>. Puoi mettere gli override di template nella directory di template del tuo progetto o nella directory di template dell’applicazione.</p>\n<p>Se hai directory di template di app e di progetto che fanno entrambe override, il template loader di default di Django proverà a caricare prima quello a livello di progetto. In altre parole, <a class=\"reference internal\" href=\"/it/6.1/ref/settings/#std-setting-TEMPLATES-DIRS\"><code class=\"xref std std-setting docutils literal notranslate\">DIRS</code></a> viene ricercata prima di <a class=\"reference internal\" href=\"/it/6.1/ref/settings/#std-setting-TEMPLATES-APP_DIRS\"><code class=\"xref std std-setting docutils literal notranslate\">APP_DIRS</code></a>.</p>\n<aside class=\"admonition admonition-seealso\" role=\"note\">\n<p class=\"admonition-title\">Vedi anche</p>\n<p>Leggi <a class=\"reference internal\" href=\"/it/6.1/ref/forms/renderers/#overriding-built-in-widget-templates\"><span class=\"std std-ref\">Overriding built-in widget templates</span></a> se stai cercando di fare questo.</p>\n</aside>\n<section id=\"overriding-from-the-project-s-templates-directory\">\n<h2>Sovrascrivere la directory dei template del progetto<a class=\"heading-anchor\" href=\"#overriding-from-the-project-s-templates-directory\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Innanzitutto, esploreremo come fare override i template creando modelli sostitutivi nella directory dei template del tuo progetto.</p>\n<p>Diciamo che stai cercando di fare override del template di una applicazione di terza parte chiamata <code class=\"docutils literal notranslate\">blog</code>, che offre i template <code class=\"docutils literal notranslate\">blog/post.html</code> e <code class=\"docutils literal notranslate\">blog/list.html</code>. Le impostazioni rilevanti avranno questo aspetto:</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=\"nn\">pathlib</span> <span class=\"kn\">import</span> Path\n\nBASE_DIR <span class=\"o\">=</span> Path<span class=\"p\">(</span><span class=\"vm\">__file__</span><span class=\"p\">)</span><span class=\"o\">.</span>resolve<span class=\"p\">()</span><span class=\"o\">.</span>parent<span class=\"o\">.</span>parent\n\nINSTALLED_APPS <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\nTEMPLATES <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>BASE_DIR <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>Le impostazioni <a class=\"reference internal\" href=\"/it/6.1/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\">TEMPLATES</code></a> e <code class=\"docutils literal notranslate\">BASE_DIR</code> esisteranno già se hai creato il tuo progetto usando il template di default del progetto. L’impostazione che necessita di essere modificata è <a class=\"reference internal\" href=\"/it/6.1/ref/settings/#std-setting-TEMPLATES-DIRS\"><code class=\"xref std std-setting docutils literal notranslate\">DIRS</code></a>.</p>\n<p>Queste impostazioni presumono che tu abbia una directory <code class=\"docutils literal notranslate\">templates</code> nella radice del progetto. Per fare override dei template per l’app <code class=\"docutils literal notranslate\">blog</code>, crea un foldere nella directory <code class=\"docutils literal notranslate\">templates</code> ed aggiungi i file di template a quella cartella:</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>Il template loader cerca prima i template nella directory <code class=\"docutils literal notranslate\">DIRS</code>. Quando le viste nell’app <code class=\"docutils literal notranslate\">blog</code> richiedono i template <code class=\"docutils literal notranslate\">blog/post.html</code> e <code class=\"docutils literal notranslate\">blog/list.html</code>, il loader restituirà i file che hai appena creato.</p>\n</section>\n<section id=\"overriding-from-an-app-s-template-directory\">\n<h2>Sovrascrivere la directory dei template di un’app<a class=\"heading-anchor\" href=\"#overriding-from-an-app-s-template-directory\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Dal momento che stai facendo override dei template situati fuori delle app di progetto, è più comune usare il primo metodo e mettere i template override nella cartella di template del progetto. Se preferisci, comunque, è anche possibile mettere gli override nella directory di template dell’app.</p>\n<p>Innanzitutto, assicurati che le impostazioni dei template stiano controllando all’interno delle directory dell’app:</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>TEMPLATES <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 vuoi mettere gli override di template in una app chiamata <code class=\"docutils literal notranslate\">myapp</code> ed i template da sovrascrivere sono chiamati <code class=\"docutils literal notranslate\">blog/list.html</code> e <code class=\"docutils literal notranslate\">blog/post.html</code> allora la struttura della directory sarà:</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>Con  <a class=\"reference internal\" href=\"/it/6.1/ref/settings/#std-setting-TEMPLATES-APP_DIRS\"><code class=\"xref std std-setting docutils literal notranslate\">APP_DIRS</code></a> impostato a <code class=\"docutils literal notranslate\">True</code>, il template loader cercherà nella directory di template dell’applicazione e troverà i template.</p>\n</section>\n<section id=\"extending-an-overridden-template\">\n<span id=\"id1\"></span><h2>Estendere un template sovrascritto<a class=\"heading-anchor\" href=\"#extending-an-overridden-template\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Con i tuoi template loader configurati, puoi estendere un template usando il tag di template <a class=\"reference internal\" href=\"/it/6.1/ref/templates/builtins/#std-templatetag-extends\"><code class=\"xref std std-ttag docutils literal notranslate\">{% extends %}</code></a> sovrascrivendolo allo stesso tempo. Questo ti permette di fare piccole personalizzazioni senza necessità di reimplementare l’intero template.</p>\n<p>Per esempio, puoi utilizzare questa tecnica per aggiungere un logo personalizzato al template <code class=\"docutils literal notranslate\">admin/base_site.html</code>:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"html+django\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">templates/admin/base_site.html</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<p>Punti chiave da notare:</p>\n<ul class=\"simple\">\n<li><p>Questo esempio crea un file in <code class=\"docutils literal notranslate\">templates/admin/base_site.html</code> che usa la directory configurata a livello di template <code class=\"docutils literal notranslate\">templates</code> per fare override di <code class=\"docutils literal notranslate\">admin/base_site.html</code>.</p></li>\n<li><p>Il nuovo template estende <code class=\"docutils literal notranslate\">admin/base_site.html</code>, che è lo stesso template che è stato sovrascritto.</p></li>\n<li><p>Il template sostituisce solo il blocco <code class=\"docutils literal notranslate\">branding</code>, aggiungendo un logo personalizzato e utilizzando <code class=\"docutils literal notranslate\">block.super</code> per mantenere il contenuto precedente.</p></li>\n<li><p>Il resto del template è ereditato invariato da <code class=\"docutils literal notranslate\">admin/base_site.html</code>.</p></li>\n</ul>\n<p>Questa tecnica funziona perchè il template loader non considera il template in override già caricato (in <code class=\"docutils literal notranslate\">templates/admin/base_site.html</code>) quando risolve il tag <code class=\"docutils literal notranslate\">extends</code>. In combinazione con <code class=\"docutils literal notranslate\">block.super</code> è una potente tecnica per fare piccole personalizzazioni.</p>\n</section>","rootId":"how-to-override-templates","toc":[{"title":"Sovrascrivere la directory dei template del progetto","anchor":"overriding-from-the-project-s-templates-directory","children":[]},{"title":"Sovrascrivere la directory dei template di un’app","anchor":"overriding-from-an-app-s-template-directory","children":[]},{"title":"Estendere un template sovrascritto","anchor":"extending-an-overridden-template","children":[]}],"breadcrumbs":[{"docname":"howto/index","title":"How-to guides","url":"/it/6.1/howto/"}],"prev":{"docname":"howto/outputting-pdf","title":"Come creare file PDF","url":"/it/6.1/howto/outputting-pdf/"},"next":{"docname":"howto/custom-template-backend","title":"Come implementare un backend per template personalizzato","url":"/it/6.1/howto/custom-template-backend/"},"formats":{"html":"/it/6.1/howto/overriding-templates/","markdown":"/it/6.1/howto/overriding-templates.md","json":"/it/6.1/howto/overriding-templates.json"},"source":"https://github.com/django/django/blob/stable/6.1.x/docs/howto/overriding-templates.txt","official":"https://docs.djangoproject.com/it/6.1/howto/overriding-templates/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}