Esercizio - Creare modelli
Verranno creati due modelli per visualizzare un elenco di canili e una pagina di dettaglio per ogni canile. Verrà anche creato un modello di base per assicurare la coerenza nell'intera applicazione.
Creare il modello di base
Un modello di base è comune per tutti i progetti Django. Per iniziare, verrà creato un modello di base.
In Visual Studio Code creare una nuova cartella all'interno di dog_shelters, denominata templates.
Creare un nuovo file all'interno di templates, denominato base.html.
Aggiungere il codice HTML seguente a base.html:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>{% block title %}Dog shelter site{% endblock %}</title> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css" integrity="sha384-B0vP5xmATw1+K9KRQjQERJvTumQW0nPEzvF6L/Z6nronJ3oUOFUFpCjEUQouq2+l" crossorigin="anonymous"> </head> <body> <article class="container"> <section class="jumbotron"> <h3>Dog shelter application</h3> </section> {% block content %} {% endblock %} </article> </body> </html>
Nota
Per il sito viene usato Bootstrap versione 4.6. Non sono tuttavia necessarie competenze di Bootstrap in questo modulo. Viene usata una sola classe, jumbotron. Nel resto del processo viene usato codice HTML di base.
Si notino le due istruzioni {% block %}
, una per il titolo e la successiva per il contenuto che verrà specificato dalle pagine figlio. Viene fornito un valore predefinito per title
, in modo da assicurare che sia sempre disponibile un titolo anche se una pagina figlio non lo configura.
Creare il modello dell'elenco dei canili
Verrà ora creato un altro modello per elencare tutti i canili. Verrà eseguito il ciclo nell'elenco dei canili e verranno creati i collegamenti ai dettagli per tutti i canili.
In dog_shelters/templates creare un nuovo file denominato shelter_list.html.
Aggiungere il codice seguente per creare il modello per l'elenco di canili:
{% extends 'base.html' %} {% block title %} Shelter list {% endblock %} {% block content %} <h2>Shelter list</h2> <div>Here is the list of registered shelters</div> {% for shelter in shelters %} <div> <a href="{% url 'shelter_detail' shelter.id %}"> {{shelter.name}} </a> </div> {% endfor %} </div> {% endblock %}
I tag block
vengono usati per indicare la posizione in cui devono essere inserite le informazioni. Viene specificato un valore title
pari a Shelter list
e gli elementi content
costituiranno l'elenco di tutti i canili.
Viene usato anche un nuovo tag, url
. Il tag url
genera in modo dinamico un URL. Gli URL vengono registrati in URLconf, in modo che possano essere modificati. Usando il tag url
, è possibile richiedere a Django di recuperare l'URL appropriato da URLconf anziché impostarlo come hardcoded in un percorso.
Il tag url
cerca il nome del percorso, shelter_detail
in questo caso, quindi l'elenco dei parametri previsti. shelter_detail
ha un parametro, pk
. Si tratta della chiave primaria, o ID, del canile. L'ID viene specificato tramite shelter.id
.
Creare il modello di dettaglio del canile
Dopo la creazione del modello dell'elenco, è ora possibile creare il modello dei dettagli.
In dog_shelters/templates creare un nuovo file denominato shelter_detail.html.
Aggiungere il codice seguente per creare il modello:
{% extends 'base.html' %} {% block title %} Shelter list {% endblock %} {% block content %} <h2>{{ shelter.name }}</h2> <div>Located in {{ shelter.location }}</div> {% if shelter.dog_set.all %} <div>Here is the list of available dogs</div> {% for dog in shelter.dog_set.all %} <div> <a href=""> {{dog.name}} </a> </div> {% endfor %} </div> {% else %} <div>This shelter has no dogs available for adoption</div> {% endif %} {% endblock %}
Si noti che nel corpo viene verificato se nel canile sono presenti cani usando if shelter.dog_set.all
. Se sono presenti cani, verrà visualizzato l'elenco tramite for
per scorrere tutti i cani. In caso contrario, verrà visualizzato un messaggio che indica che non sono disponibili cani. Il collegamento verrà aggiornato in un'unità successiva.
Nota
Come si può notare, vengono effettuate due chiamate a shelter.dog_set.all
. Se si ha familiarità con i database e ORM, l'uso di due chiamate al database potrebbe risultare preoccupante. Due chiamate influiscono in genere in modo negativo sulle prestazioni. In Django è disponibile la memorizzazione nella cache predefinita, che assicura che venga eseguita una sola chiamata al database.
Testare il sito
Dopo la creazione dei modelli, è possibile provare a usare il sito.
Salvare tutti i file.
Apri il browser e vai in http://localhost:8000.
Verrà visualizzato l'elenco di canili.
Selezionare Contoso.
Viene visualizzato l'elenco di cani per il canile Contoso.