{"title":"Scrivere la tua prima applicazione in Django, parte 6","version":"3.2","locale":"it","docname":"intro/tutorial06","url":"/it/3.2/intro/tutorial06/","canonical":"https://djangodocs.dev/it/3.2/intro/tutorial06/","summary":"Questo tutorial inizia da dove Tutorial 5 è finito. Abbiamo costruito un’applicazione Web-poll testata, e ora andremo ad aggiungere un foglio di stile e…","html":"<h1>Scrivere la tua prima applicazione in Django, parte 6<a class=\"heading-anchor\" href=\"#writing-your-first-django-app-part-6\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Questo tutorial inizia da dove <a class=\"reference internal\" href=\"/it/3.2/intro/tutorial05/\"><span class=\"doc\">Tutorial 5</span></a> è finito. Abbiamo costruito un’applicazione Web-poll testata, e ora andremo ad aggiungere un foglio di stile e un’immagine.</p>\n<p>Insieme all’HTML generato dal server, le applicazioni web di solito hanno bisogno di servire altri file – come immagini, JavaScript, o CSS – necessari per generare la pagina web in completo.\nIn Django, ci riferiamo a questi file chiamandoli «file statici».</p>\n<p>Per piccoli progetti, questo non è un grosso problema, perchè puoi tenere i file statici ovunque il tuo web server possa trovarli. Comunque, in progetti più grandi – soprattutto in quelli co posti da molte app – gestire più gruppi di file statici generati da ogni applicazione inizia a diventare complesso.</p>\n<p>Questo è il motivo per cui serve <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.staticfiles</span></code>: colleziona file statici da ogni applicazione  (e da ogni altro posto che specifichi) in una singola destinazione che può essere facilmente servita in produzione.</p>\n<aside class=\"admonition-where-to-get-help admonition\">\n<p class=\"admonition-title\">Dove trovare aiuto:</p>\n<p>Se hai difficoltà a completare questo tutorial,  per favore vai alla sezione <a class=\"reference internal\" href=\"/it/3.2/faq/help/\"><span class=\"doc\">Getting Help</span></a> delle FAQ.</p>\n</aside>\n<section id=\"customize-your-app-s-look-and-feel\">\n<h2>Personalizza l’aspetto e il design della tua <em>applicazione</em><a class=\"heading-anchor\" href=\"#customize-your-app-s-look-and-feel\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Innanzitutto, crea una directory chiamata <code class=\"docutils literal notranslate\"><span class=\"pre\">static</span></code> nella tua directory <code class=\"docutils literal notranslate\"><span class=\"pre\">polls</span></code>. Django cercherà i file statici lì, in modo simile a come Django trova i modelli all’interno di <code class=\"docutils literal notranslate\"><span class=\"pre\">polls/templates/</span></code>.</p>\n<p>L’impostazione <a class=\"reference internal\" href=\"/it/3.2/ref/settings/#std-setting-STATICFILES_FINDERS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATICFILES_FINDERS</span></code></a> di Django contiene una lista di «cercatori» che sanno come trovare i file statici da diverse fonti. Uno dei predefiniti è <code class=\"docutils literal notranslate\"><span class=\"pre\">AppDirectoriesFinder</span></code>, che cerca in una sottodirectory chiamata «static» per ciascuna delle app inserite in <a class=\"reference internal\" href=\"/it/3.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a>, come quella in <code class=\"docutils literal notranslate\"><span class=\"pre\">polls</span></code> che abbiamo appena creato. Il sito admin usa la stessa struttura di directory per i suoi file statici.</p>\n<p>Dentro la directory <code class=\"docutils literal notranslate\"><span class=\"pre\">static</span></code> che hai appena creato, crea un’altra directory chiamata <code class=\"docutils literal notranslate\"><span class=\"pre\">polls</span></code>, e dentro quest’ultima crea un file chiamato <code class=\"docutils literal notranslate\"><span class=\"pre\">style.css</span></code>. In altre parole, il tuo foglio di stile dovrebbe essere in <code class=\"docutils literal notranslate\"><span class=\"pre\">polls/static/polls/style.css</span></code>. Per come funziona <code class=\"docutils literal notranslate\"><span class=\"pre\">AppDirectoriesFinder</span></code>, potrai riferirti a questo file statico in Django semplicemente come <code class=\"docutils literal notranslate\"><span class=\"pre\">polls/style.css</span></code>, in modo analogo a come ti riferisci ai percorsi per i template.</p>\n<aside class=\"admonition-static-file-namespacing admonition\">\n<p class=\"admonition-title\">Namespacing dei file statici</p>\n<p>Come per i template, <em>potremmo</em> semplicemente inserire i nostri file statici direttamente in <code class=\"docutils literal notranslate\"><span class=\"pre\">polls/static</span></code> (anziché creare un’altra sottodirectory <code class=\"docutils literal notranslate\"><span class=\"pre\">polls</span></code>), ma sarebbe certamente una cattiva idea. Django sceglierà il primo file statico che troverà con un nome che corrisponde, e se tu avessi un file statico con lo stesso nome in una app <em>diversa</em>, Django non saprebbe come distinguere fra i due. Dobbiamo essere in grado di puntare Django sul file corretto, ed il modo migliore per farlo è quello di inserirlo in un <em>namespace</em>. Cioè, inserendo questi file statici dentro <em>un’altra</em> directory che abbia come nome il nome della app stessa.</p>\n</aside>\n<p>Inserisci il seguente codice in quel foglio di stile (<code class=\"docutils literal notranslate\"><span class=\"pre\">polls/static/polls/style.css</span></code>):</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"css\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">polls/static/polls/style.css</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Css</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=\"Css code\"><code><span class=\"nt\">li</span><span class=\"w\"> </span><span class=\"nt\">a</span><span class=\"w\"> </span><span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">color</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"kc\">green</span><span class=\"p\">;</span>\n<span class=\"p\">}</span>\n</code></pre></figure>\n<p>Poi, aggiungi il seguente codice all’inizio di <code class=\"docutils literal notranslate\"><span class=\"pre\">polls/templates/polls/index.html</span></code>:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"html+django\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">polls/templates/polls/index.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\">load</span> <span class=\"nv\">static</span> <span class=\"cp\">%}</span>\n\n<span class=\"p\">&lt;</span><span class=\"nt\">link</span> <span class=\"na\">rel</span><span class=\"o\">=</span><span class=\"s\">&quot;stylesheet&quot;</span> <span class=\"na\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;text/css&quot;</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{%</span> <span class=\"k\">static</span> <span class=\"s1\">&#39;polls/style.css&#39;</span> <span class=\"cp\">%}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>\n</code></pre></figure>\n<p>Il template tag <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">static</span> <span class=\"pre\">%}</span></code> genera l’URL assoluto dei file statici.</p>\n<p>Questo è tutto quello che devi fare per lo sviluppare.</p>\n<p>Avvia il server (o riavvialo se è già in esecuzione):</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-0-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>python<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>runserver\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-0-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py manage.py runserver\n</code></pre></div></div></div>\n<p>Ricarica <code class=\"docutils literal notranslate\"><span class=\"pre\">http://localhost:8000/polls/</span></code> e dovresti vedere che i link delle domande sono verdi ( stile Django! ) il che significa che il tuo foglio di stile è stato caricato correttamente.</p>\n</section>\n<section id=\"adding-a-background-image\">\n<h2>Aggiunta di un’immagine di sfondo<a class=\"heading-anchor\" href=\"#adding-a-background-image\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Successivamente, creeremo una sottocartella per le immagini. Crea una sottocartella dentro la cartella <code class=\"docutils literal notranslate\"><span class=\"pre\">polls/static/polls/</span></code>. Dentro questa cartella, metti un’immagine chiamata <code class=\"docutils literal notranslate\"><span class=\"pre\">background.gif</span></code>. In altre parole, metti la tua immagine dentro  <code class=\"docutils literal notranslate\"><span class=\"pre\">polls/static/polls/images/background.gif</span></code>.</p>\n<p>Quindi, aggiungi al tuo foglio di stile (<code class=\"docutils literal notranslate\"><span class=\"pre\">polls/static/polls/style.css</span></code>):</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"css\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">polls/static/polls/style.css</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Css</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=\"Css code\"><code><span class=\"nt\">body</span><span class=\"w\"> </span><span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">background</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"kc\">white</span><span class=\"w\"> </span><span class=\"nb\">url</span><span class=\"p\">(</span><span class=\"s2\">&quot;images/background.gif&quot;</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"kc\">no-repeat</span><span class=\"p\">;</span>\n<span class=\"p\">}</span>\n</code></pre></figure>\n<p>Ricarica <code class=\"docutils literal notranslate\"><span class=\"pre\">http://localhost:8000/polls/</span></code> e dovresti vedere lo sfondo caricato in alto a sinistra dello schermo.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Avvertimento</p>\n<p>Il template tag  <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">static</span> <span class=\"pre\">%}</span></code>  non è disponibile per usarlo con file statici che non sono generati da Django, come i tuoi fogli di stile. Tu dovresti sempre usare i  <strong>percorsi relativi</strong> per collegare i tuoi file statici tra loro, perchè poi puoi cambiare il  <a class=\"reference internal\" href=\"/it/3.2/ref/settings/#std-setting-STATIC_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_URL</span></code></a> (usata da <a class=\"reference internal\" href=\"/it/3.2/ref/templates/builtins/#std-templatetag-static\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">static</span></code></a> template tag per generare le sue URLs)  senza dover modificare una serie di percorsi anche nei tuoi file statici</p>\n</aside>\n<p>Queste sono le <strong>basi</strong>. Per maggiori dettagli sulla configurazione e altri particolari del framework vedi <a class=\"reference internal\" href=\"/it/3.2/howto/static-files/\"><span class=\"doc\">l’howto dei file statici</span></a> e <a class=\"reference internal\" href=\"/it/3.2/ref/contrib/staticfiles/\"><span class=\"doc\">la guida di riferimento di staticfiles</span></a>. <a class=\"reference internal\" href=\"/it/3.2/howto/static-files/deployment/\"><span class=\"doc\">Distribuire i file statici</span></a> spiega invece come usare i file statici su un server reale.</p>\n<p>Quando ti senti a tuo agio con i file statici, leggi <a class=\"reference internal\" href=\"/it/3.2/intro/tutorial07/\"><span class=\"doc\">la parte 7 di questo tutorial</span></a> per imparare a personalizzare il sito admin che viene generato automaticamente da Django.</p>\n</section>","rootId":"writing-your-first-django-app-part-6","toc":[{"title":"Personalizza l’aspetto e il design della tua applicazione","anchor":"customize-your-app-s-look-and-feel","children":[]},{"title":"Aggiunta di un’immagine di sfondo","anchor":"adding-a-background-image","children":[]}],"breadcrumbs":[{"docname":"intro/index","title":"Come iniziare","url":"/it/3.2/intro/"}],"prev":{"docname":"intro/tutorial05","title":"Scrivere la tua prima applicazione in Django, parte 5","url":"/it/3.2/intro/tutorial05/"},"next":{"docname":"intro/tutorial07","title":"Scrivere la tua prima applicazione in Django, parte 7","url":"/it/3.2/intro/tutorial07/"},"formats":{"html":"/it/3.2/intro/tutorial06/","markdown":"/it/3.2/intro/tutorial06.md","json":"/it/3.2/intro/tutorial06.json"},"source":"https://github.com/django/django/blob/stable/3.2.x/docs/intro/tutorial06.txt","official":"https://docs.djangoproject.com/it/3.2/intro/tutorial06/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}