{"title":"Scrivere la tua prima applicazione in Django, parte 1","version":"5.0","locale":"it","docname":"intro/tutorial01","url":"/it/5.0/intro/tutorial01/","canonical":"https://djangodocs.dev/it/5.0/intro/tutorial01/","summary":"Impariamo attraverso un esempio. Durante questa guida, ti accompagneremo attraverso la creazione di una semplice applicazione per sondaggi. Consisterà di due parti:…","html":"<h1>Scrivere la tua prima applicazione in Django, parte 1<a class=\"heading-anchor\" href=\"#writing-your-first-django-app-part-1\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Impariamo attraverso un esempio.</p>\n<p>Durante questa guida, ti accompagneremo attraverso la creazione di una semplice applicazione per sondaggi.</p>\n<p>Consisterà di due parti:</p>\n<ul class=\"simple\">\n<li><p>Un sito pubblico, che permette agli utenti di visualizzare sondaggi e votarli.</p></li>\n<li><p>Un sito amministrativo che ti permette l’aggiunta, modifica ed eliminazione di sondaggi.</p></li>\n</ul>\n<p>Supponiamo che tu abbia già <a class=\"reference internal\" href=\"/it/5.0/intro/install/\"><span class=\"doc\">Django installato</span></a>. Puoi dire che Django sia installato e quale versione sia eseguendo il seguente comando in un prompt della shell (indicato dal prefisso $):</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>-m<span class=\"w\"> </span>django<span class=\"w\"> </span>--version\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 -m django --version\n</code></pre></div></div></div>\n<p>Se Django è installato, dovresti vedere la versione della tua installazione. Se non lo è, riceverai un errore che dice «No module named django».</p>\n<p>Questo tutorial è stato scritto per Django 5.0, che supporta Python 3.10 e successivi. Se la versione di Django è diversa, puoi fare riferimento al tutorial per la tua versione di Django usando il selettore della versione in basso a destra in questa pagina oppure aggiornare Django alla versione più recente. Se stai utilizzando una versione precedente di Python, controlla <a class=\"reference internal\" href=\"/it/5.0/faq/install/#faq-python-version-support\"><span class=\"std std-ref\">Che versione di Python posso usare con Django?</span></a> per trovare una versione compatibile di Django.</p>\n<p>Vedi <a class=\"reference internal\" href=\"/it/5.0/topics/install/\"><span class=\"doc\">Come installare Django</span></a> per consigli su come rimuovere vecchie versioni di Django ed installarne una più nuova.</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/5.0/faq/help/\"><span class=\"doc\">Getting Help</span></a> delle FAQ.</p>\n</aside>\n<section id=\"creating-a-project\">\n<h2>Creare un progetto<a class=\"heading-anchor\" href=\"#creating-a-project\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Se questa è la prima volta volta che usi Django, dovrai prenderti cura di qualche configurazione iniziale. Specificatamente, dovrai auto-generare del codice che costituisce un <a class=\"reference internal\" href=\"/it/5.0/glossary/#term-project\"><span class=\"xref std std-term\">progetto</span></a> Django – una collezione di settaggi per un’instanza di Django, che include configurazione del database, opzioni specifiche per Django e settaggi specifici per l’applicazione.</p>\n<p>Dalla linea di comando, <code class=\"docutils literal notranslate\"><span class=\"pre\">cd</span></code> dentro la directory dove vorresti tenere il tuo codice, poi chiama il seguente comando:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-1-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>django-admin<span class=\"w\"> </span>startproject<span class=\"w\"> </span>mysite\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-1-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> django-admin startproject mysite\n</code></pre></div></div></div>\n<p>Questo creerà una directory <code class=\"docutils literal notranslate\"><span class=\"pre\">mysite</span></code> nella directrory presente. Se non funziona, consulta <a class=\"reference internal\" href=\"/it/5.0/faq/troubleshooting/#troubleshooting-django-admin\"><span class=\"std std-ref\">Problemi nell’esecuzione di django-admin</span></a>.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Nota</p>\n<p>Vorrai evitare di chiamare progetti con lo stesso nome di componenti predefiniti in Python o Django. In particolare, questo significa evitare nomi quali <code class=\"docutils literal notranslate\"><span class=\"pre\">django</span></code> (che confligge con Django stesso) o <code class=\"docutils literal notranslate\"><span class=\"pre\">test</span></code> (che confligge con il pacchetto Python di serie).</p>\n</aside>\n<p>Diamo un’occhiata a cosa <a class=\"reference internal\" href=\"/it/5.0/ref/django-admin/#django-admin-startproject\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">startproject</span></code></a> ha creato:</p>\n<div class=\"code-block\" data-language=\"text\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Text</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=\"Text code\"><code>mysite/\n    manage.py\n    mysite/\n        __init__.py\n        settings.py\n        urls.py\n        asgi.py\n        wsgi.py\n</code></pre></div>\n<p>Questi file sono:</p>\n<ul class=\"simple\">\n<li><p>La directory principale <code class=\"file docutils literal notranslate\"><span class=\"pre\">mysite/</span></code> è un contenitore per il tuo progetto. Il suo nome non ha importanza per Django; puoi rinominarlo come preferisci.</p></li>\n<li><p><code class=\"file docutils literal notranslate\"><span class=\"pre\">manage.py</span></code>: Una utility da linea di comando che ti permette di interagire con questo progetto in svariate maniere. Puoi leggere tutti i dettagli a proposito di <code class=\"file docutils literal notranslate\"><span class=\"pre\">manage.py</span></code> in in <a class=\"reference internal\" href=\"/it/5.0/ref/django-admin/\"><span class=\"doc\">django-admin and manage.py</span></a>.</p></li>\n<li><p>La cartella interna <code class=\"file docutils literal notranslate\"><span class=\"pre\">mysite/</span></code> è il vero pacchetto Python per il tuo progetto. Il suo nome è il nome del pacchetto Python che dovrai usare per importare qualsiasi cosa dall’interno di esso. (es. <code class=\"docutils literal notranslate\"><span class=\"pre\">mysite.urls</span></code>).</p></li>\n<li><p><code class=\"file docutils literal notranslate\"><span class=\"pre\">mysite/__init__.py</span></code>: Un file vuoto che indica a Python che questa directory dovrebbe essere considerata un pacchetto Python. Se sei un principiante di Python, leggi <a class=\"reference external\" href=\"https://docs.python.org/3/tutorial/modules.html#tut-packages\" title=\"(in Python v3.14)\"><span class=\"xref std std-ref\">ulteriori informazioni sui pacchetti</span></a> nella documentazione ufficiale di Python.</p></li>\n<li><p><code class=\"file docutils literal notranslate\"><span class=\"pre\">mysite/settings.py</span></code>: Settaggi/configurazione per questo progetto Django. <a class=\"reference internal\" href=\"/it/5.0/topics/settings/\"><span class=\"doc\">Django settings</span></a> ha tutte le informazioni di cui hai bisogno su come funzionano i settaggi.</p></li>\n<li><p><code class=\"file docutils literal notranslate\"><span class=\"pre\">mysite/urls.py</span></code>: Le dichiarazione di URL per questo progetto Django; una «tavola di contenuti» del tuo sito Django. Per saperne di più sulle URLs, leggi <a class=\"reference internal\" href=\"/it/5.0/topics/http/urls/\"><span class=\"doc\">URL dispatcher</span></a>.</p></li>\n<li><p><code class=\"file docutils literal notranslate\"><span class=\"pre\">mysite/asgi.py</span></code>: Un punto di ingresso per i server web compatibili con ASGI per servire il tuo progetto. Vedi <a class=\"reference internal\" href=\"/it/5.0/howto/deployment/asgi/\"><span class=\"doc\">Come distribuire con ASGI.</span></a> per maggiori dettagli .</p></li>\n<li><p><code class=\"file docutils literal notranslate\"><span class=\"pre\">mysite/wsgi.py</span></code>: Un punto d’ingresso per web server compatibili con WSGI per servire il tuo progetto. Vedi <a class=\"reference internal\" href=\"/it/5.0/howto/deployment/wsgi/\"><span class=\"doc\">Come distribuire con WSGI.</span></a> per maggiori dettagli.</p></li>\n</ul>\n</section>\n<section id=\"the-development-server\">\n<h2>Il server di sviluppo<a class=\"heading-anchor\" href=\"#the-development-server\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Verifichiamo che il tuo progetto in Django funzioni. Entra nella cartella esterna <code class=\"file docutils literal notranslate\"><span class=\"pre\">mysite</span></code>, se non l’hai ancora fatto, e chiama i seguenti comandi:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-2-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-2-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>Vedrai il seguente output nella linea di comando:</p>\n<pre class=\"literal-block\">Performing system checks...\n\nSystem check identified no issues (0 silenced).\n\nYou have unapplied migrations; your app may not work properly until they are applied.\nRun 'python manage.py migrate' to apply them.\n\n09 ago 2026 - 15:50:53\nDjango version 5.0, using settings 'mysite.settings'\nStarting development server at <a class=\"reference external\" href=\"http://127.0.0.1:8000/\">http://127.0.0.1:8000/</a>\nQuit the server with CONTROL-C.</pre>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Nota</p>\n<p>Per ora ignora gli avvisi relativi alle migrazione del database non applicate, ci preoccuperemo a breve del database.</p>\n</aside>\n<p>Adesso che il server sta girando, visita <a class=\"reference external\" href=\"http://127.0.0.1:8000/\">http://127.0.0.1:8000/</a> con il tuo browser web. Vedrai una pagina «Congratulations!», con un razzo che sta partendo. Funziona!</p>\n<p>Hai avviato il server di sviluppo Django, un web server leggero scritto puramente in Python. Lo abbiamo incluso con Django in modo che tu possa sviluppare le cose rapidamente, senza dover avere a che fare con la configurazione di un server di produzione – come Apache – finchè non sei pronto per la produzione.</p>\n<p>Adesso è un buon momento per fare un appunto: <strong>non*</strong> usare questo server in nessun ambiente che somigli anche vagamente alla produzione. E” adatto solo allo sviluppo. (Siamo nel business dei web framework, non dei web server).</p>\n<p>(To serve the site on a different port, see the <a class=\"reference internal\" href=\"/it/5.0/ref/django-admin/#django-admin-runserver\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">runserver</span></code></a> reference.)</p>\n<aside class=\"admonition-automatic-reloading-of-djadmin-runserver admonition\">\n<p class=\"admonition-title\">Ricaricamento automatico di <a class=\"reference internal\" href=\"/it/5.0/ref/django-admin/#django-admin-runserver\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">runserver</span></code></a></p>\n<p>Quando necessario, il server di sviluppo ricarica automaticamente il codice Python per ogni richiesta. Non c’è bisogno di far ripartire il server per applicare le modifiche al codice. Ciò nonostante, alcune azioni quali l’aggiunta di file non causano un riavvio. In questi casi dovrai quindi riavviare il server.</p>\n</aside>\n</section>\n<section id=\"creating-the-polls-app\">\n<h2>Creazione dell’applicazione Sondaggi<a class=\"heading-anchor\" href=\"#creating-the-polls-app\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Ora che il tuo ambiente – un «progetto»  – è impostato, sei pronto per iniziare a lavorare.</p>\n<p>Ogni applicazione che scrivi in Django è composta da un pacchetto Python che segue alcune convenzioni. Django fornisce una utility che genera in automatico la struttura di base delle cartelle di una app, così puoi concentrarti sulla scrittura del codice invece che creare le cartelle.</p>\n<aside class=\"admonition-projects-vs-apps admonition\">\n<p class=\"admonition-title\">Progetti contro applicazioni</p>\n<p>Qual è la differenza tra un progetto ed una app? Una app è una applicazione web che fa qualcosa – per es. un sistema di blog, un database di record pubblici o una piccola app per i sondaggi. Un progetto è una collezione di configurazioni ed app per un particolare sito web. Un progetto può contenere più app. Una app può far parte di più progetti.</p>\n</aside>\n<p>Le tue app possono vivere ovunque sul tuo <a class=\"reference external\" href=\"https://docs.python.org/3/tutorial/modules.html#tut-searchpath\" title=\"(in Python v3.14)\"><span class=\"xref std std-ref\">Python path</span></a>. In questo tutorial, creeremo la nostra app di sondaggio nella stessa directory del file: <code class=\"file docutils literal notranslate\"><span class=\"pre\">manage.py</span></code> in modo che possa essere importato come modulo di primo livello, piuttosto che come sottomodulo di <code class=\"docutils literal notranslate\"><span class=\"pre\">mysite</span></code>.</p>\n<p>Per creare la tua app, sii sicuro di essere nella stessa cartella di <code class=\"file docutils literal notranslate\"><span class=\"pre\">manage.py</span></code> e scrivi il seguente commando:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-3-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>startapp<span class=\"w\"> </span>polls\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-3-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 startapp polls\n</code></pre></div></div></div>\n<p>Questo creerà la cartella <code class=\"file docutils literal notranslate\"><span class=\"pre\">polls</span></code>, che è strutturata in questo modo:</p>\n<div class=\"code-block\" data-language=\"text\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Text</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=\"Text code\"><code>polls/\n    __init__.py\n    admin.py\n    apps.py\n    migrations/\n        __init__.py\n    models.py\n    tests.py\n    views.py\n</code></pre></div>\n<p>La struttura di questa cartella contiene la nostra applicazione sondaggio.</p>\n</section>\n<section id=\"write-your-first-view\">\n<h2>Scrivi la tua prima vista<a class=\"heading-anchor\" href=\"#write-your-first-view\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Scriviamo la nostra prima vista. Apri il file <code class=\"docutils literal notranslate\"><span class=\"pre\">polls/views.py</span></code> e scrivi il seguente codice Python:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">polls/views.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.http</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">HttpResponse</span>\n\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">index</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"n\">HttpResponse</span><span class=\"p\">(</span><span class=\"s2\">&quot;Hello, world. You&#39;re at the polls index.&quot;</span><span class=\"p\">)</span>\n</code></pre></figure>\n<p>This is the most basic view possible in Django. To access it in a browser, we\nneed to map it to a URL - and for this we need to define a URL configuration,\nor «URLconf» for short. These URL configurations are defined inside each\nDjango app, and they are Python files named <code class=\"docutils literal notranslate\"><span class=\"pre\">urls.py</span></code>.</p>\n<p>To define a URLconf for the <code class=\"docutils literal notranslate\"><span class=\"pre\">polls</span></code> app, create a file <code class=\"docutils literal notranslate\"><span class=\"pre\">polls/urls.py</span></code>\nwith the following content:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">polls/urls.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">path</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">views</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;&quot;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">index</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;index&quot;</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></figure>\n<p>Your app directory should now look like:</p>\n<div class=\"code-block\" data-language=\"text\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Text</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=\"Text code\"><code>polls/\n    __init__.py\n    admin.py\n    apps.py\n    migrations/\n        __init__.py\n    models.py\n    tests.py\n    urls.py\n    views.py\n</code></pre></div>\n<p>The next step is to configure the global URLconf in the <code class=\"docutils literal notranslate\"><span class=\"pre\">mysite</span></code> project to\ninclude the URLconf defined in <code class=\"docutils literal notranslate\"><span class=\"pre\">polls.urls</span></code>. To do this, add an import for\n<code class=\"docutils literal notranslate\"><span class=\"pre\">django.urls.include</span></code> in <code class=\"docutils literal notranslate\"><span class=\"pre\">mysite/urls.py</span></code> and insert an\n<a class=\"reference internal\" href=\"/it/5.0/ref/urls/#django.urls.include\" title=\"django.urls.include\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">include()</span></code></a> in the <code class=\"docutils literal notranslate\"><span class=\"pre\">urlpatterns</span></code> list, so you have:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">mysite/urls.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">include</span><span class=\"p\">,</span> <span class=\"n\">path</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;polls/&quot;</span><span class=\"p\">,</span> <span class=\"n\">include</span><span class=\"p\">(</span><span class=\"s2\">&quot;polls.urls&quot;</span><span class=\"p\">)),</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;admin/&quot;</span><span class=\"p\">,</span> <span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">site</span><span class=\"o\">.</span><span class=\"n\">urls</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></figure>\n<p>La funzione <a class=\"reference internal\" href=\"/it/5.0/ref/urls/#django.urls.include\" title=\"django.urls.include\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">include()</span></code></a> permette di fare riferimento ad altre URLconf. Ogni volta che Django incontra <a class=\"reference internal\" href=\"/it/5.0/ref/urls/#django.urls.include\" title=\"django.urls.include\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">include()</span></code></a>, rimuove qualsiasi parte dell’URL combaciata fino a quel punto e invia la stringa rimanente alla URLconf inclusa per un’ulteriore elaborazione.</p>\n<p>L’idea alla base di <a class=\"reference internal\" href=\"/it/5.0/ref/urls/#django.urls.include\" title=\"django.urls.include\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">include()</span></code></a> è di semplificare il plug-and-play delle URL. Poiché i sondaggi si trovano nella propria URLconf (<code class=\"docutils literal notranslate\"><span class=\"pre\">polls/urls.py</span></code>), possono essere posizionati dentro «/polls/», o dentro «/fun_polls/», o dentro «/content/polls/», o qualsiasi altro percorso e l’app continuerà a funzionare.</p>\n<aside class=\"admonition-when-to-use-func-django-urls-include admonition\">\n<p class=\"admonition-title\">Quando usare  <a class=\"reference internal\" href=\"/it/5.0/ref/urls/#django.urls.include\" title=\"django.urls.include\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">include()</span></code></a></p>\n<p>Dovresti usare sempre <code class=\"docutils literal notranslate\"><span class=\"pre\">include()</span></code> quando includi altri pattern URL. L’unica eccezione a questo è <code class=\"docutils literal notranslate\"><span class=\"pre\">admin.site.urls</span></code>.</p>\n</aside>\n<p>Ora hai collegato una vista <code class=\"docutils literal notranslate\"><span class=\"pre\">index</span></code> nella URLconf. Verifica che funzioni con il seguente comando:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-4-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-4-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>Nel tuo browser vai all’indirizzo <a class=\"reference external\" href=\"http://localhost:8000/polls/\">http://localhost:8000/polls/</a> , e dovresti vedere il testo «<em>Hello, world. You’re at the polls index.</em>», che hai definito nella view  <code class=\"docutils literal notranslate\"><span class=\"pre\">index</span></code>.</p>\n<aside class=\"admonition-page-not-found admonition\">\n<p class=\"admonition-title\">Non hai trovato la pagina?</p>\n<p>Se ottieni una pagina di errore, controlla di stare andando su <a class=\"reference external\" href=\"http://localhost:8000/polls/\">http://localhost:8000/polls/</a> e non <a class=\"reference external\" href=\"http://localhost:8000/\">http://localhost:8000/</a>.</p>\n</aside>\n<p>Alla funzione <a class=\"reference internal\" href=\"/it/5.0/ref/urls/#django.urls.path\" title=\"django.urls.path\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">path()</span></code></a> vengono passati quattro argomenti, due obbligatori: <code class=\"docutils literal notranslate\"><span class=\"pre\">route</span></code> e <code class=\"docutils literal notranslate\"><span class=\"pre\">view</span></code> e due opzionali: <code class=\"docutils literal notranslate\"><span class=\"pre\">kwargs</span></code>, e``name``. A questo punto, vale la pena rivedere a cosa servono questi argomenti.</p>\n<section id=\"path-argument-route\">\n<h3>Argomento di <a class=\"reference internal\" href=\"/it/5.0/ref/urls/#django.urls.path\" title=\"django.urls.path\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">path()</span></code></a>: <code class=\"docutils literal notranslate\"><span class=\"pre\">route</span></code><a class=\"heading-anchor\" href=\"#path-argument-route\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">route</span></code> è una stringa che contiene un schema di URL. Durante l’elaborazione di una richiesta, Django inizia dal primo schema in <code class=\"docutils literal notranslate\"><span class=\"pre\">urlpatterns</span></code> e si fa strada lungo l’elenco, confrontando la URL richiesta con ogni schema fino a quando non trova quello corrispondente.</p>\n<p>I pattern non cercano i parametri GET e POST o il nome di dominio. Ad esempio, in una richiesta a <code class=\"docutils literal notranslate\"><span class=\"pre\">https://www.example.com/myapp/</span></code>, URLconf cercherà <code class=\"docutils literal notranslate\"><span class=\"pre\">myapp/</span></code>. In una richiesta a https://www.example.com/myapp/?page=3`, URLconf cercherà anche <code class=\"docutils literal notranslate\"><span class=\"pre\">myapp/</span></code>.</p>\n</section>\n<section id=\"path-argument-view\">\n<h3>Argomento di <a class=\"reference internal\" href=\"/it/5.0/ref/urls/#django.urls.path\" title=\"django.urls.path\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">path()</span></code></a>: <code class=\"docutils literal notranslate\"><span class=\"pre\">view</span></code><a class=\"heading-anchor\" href=\"#path-argument-view\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Quando Django trova un pattern corrispondente, chiama la vista specificata con un oggetto di tipo <a class=\"reference internal\" href=\"/it/5.0/ref/request-response/#django.http.HttpRequest\" title=\"django.http.HttpRequest\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpRequest</span></code></a> come primo argomento e qualsiasi valore «catturato» dal percorso come argomenti chiave. Ne faremo un esempio tra poco.</p>\n</section>\n<section id=\"path-argument-kwargs\">\n<h3>Argomento di <a class=\"reference internal\" href=\"/it/5.0/ref/urls/#django.urls.path\" title=\"django.urls.path\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">path()</span></code></a>: <code class=\"docutils literal notranslate\"><span class=\"pre\">kwargs</span></code><a class=\"heading-anchor\" href=\"#path-argument-kwargs\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Argomenti arbitrari di parole chiave possono essere passati in un dizionario alla vista di destinazione. Non useremo questa funzionalità di Django nel tutorial.</p>\n</section>\n<section id=\"path-argument-name\">\n<h3>Argomento di <a class=\"reference internal\" href=\"/it/5.0/ref/urls/#django.urls.path\" title=\"django.urls.path\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">path()</span></code></a>: <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code><a class=\"heading-anchor\" href=\"#path-argument-name\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Assegnare un nome alla tua URL ti consente di fare riferimento ad esso in modo inequivocabile da qualsiasi altra parte in Django, specialmente all’interno dei template. Questa potente funzionalità ti consente di apportare modifiche globali al modello delle URL del tuo progetto toccando solo un singolo file.</p>\n<p>Quando sei a tuo agio con il flusso base di richiesta e risposta, leggi <a class=\"reference internal\" href=\"/it/5.0/intro/tutorial02/\"><span class=\"doc\">parte 2 di questo tutorial</span></a>  per iniziare a lavorare con il database.</p>\n</section>\n</section>","rootId":"writing-your-first-django-app-part-1","toc":[{"title":"Creare un progetto","anchor":"creating-a-project","children":[]},{"title":"Il server di sviluppo","anchor":"the-development-server","children":[]},{"title":"Creazione dell’applicazione Sondaggi","anchor":"creating-the-polls-app","children":[]},{"title":"Scrivi la tua prima vista","anchor":"write-your-first-view","children":[{"title":"Argomento di path(): route","anchor":"path-argument-route","children":[]},{"title":"Argomento di path(): view","anchor":"path-argument-view","children":[]},{"title":"Argomento di path(): kwargs","anchor":"path-argument-kwargs","children":[]},{"title":"Argomento di path(): name","anchor":"path-argument-name","children":[]}]}],"breadcrumbs":[{"docname":"intro/index","title":"Come iniziare","url":"/it/5.0/intro/"}],"prev":{"docname":"intro/install","title":"Guida rapida di installazione","url":"/it/5.0/intro/install/"},"next":{"docname":"intro/tutorial02","title":"Scrivere la tua prima applicazione in Django, parte 2","url":"/it/5.0/intro/tutorial02/"},"formats":{"html":"/it/5.0/intro/tutorial01/","markdown":"/it/5.0/intro/tutorial01.md","json":"/it/5.0/intro/tutorial01.json"},"source":"https://github.com/django/django/blob/stable/5.0.x/docs/intro/tutorial01.txt","official":"https://docs.djangoproject.com/it/5.0/intro/tutorial01/","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"]}