Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Creiamo i Template della rubrica

Il codice per esteso di tutti i Template dell'applicazione
Il codice per esteso di tutti i Template dell'applicazione
Link copiato negli appunti

Nelle View che abbiamo definito, abbiamo fatto riferimento a quattro Template:

  • index.html
  • form.html
  • detail.html
  • formTelefono.html

Per prima cosa dobbiamo modificare la variabile TEMPLATE_DIRS in primoprogetto/settings.py e inserire il percorso completo della directory che conterrà i nostri Template, ad esempio:

TEMPLATE_DIRS = ( 
    "C:/Documents and Settings/Utente/primoprogetto/rubrica/templates"	
)

I Template che utilizzeremo estenderanno tutti un template base.html che descrive la struttura della pagina.

Creiamo quindi la cartella templates/ in rubrica/ e il Template base.html:

base.html

<html>
<head>    
  <title>{% block title %}{% endblock %}</title>
</head>
<body>    
  <h1>Rubrica telefonica</h1>    
  {% block content %}{% endblock %}
</body>
</html>

Nonostante la semplicità di questo template, notiamo che, oltre ad elementi fissi, sono definiti degli elementi (Tag) block con un identificativo (title, content). Tali elementi block saranno ridefiniti nei Template che estendono il Template di base.

Creiamo quindi il template index.html:

index.html

{% extends "base.html" %}      

{% block title %} Lista contatti in rubrica {% endblock %}

{% block content %}
  {% if lista_contatti %}    
    <table>    
      {% for cont in lista_contatti %}        
	    <tr>
	    <td><a href="/rubrica/{{ cont.id }}/"> {{ cont.nome }}</a></td>
	    <td><a href="/rubrica/{{ cont.id }}/"> {{ cont.cognome }}</a></td>
	    </tr>
	    {% endfor %}    
 	
  	  <tr><td><a href="/rubrica/form/">Aggiungi contatto/lt;/a></td></tr>    
    </table>
  {% else %}
    <p>Nessun contatto presente in rubrica. <a href="/rubrica/form/">Aggiungi un contatto</a></p>
  {% endif %}
{% endblock %}

La prima direttiva indica che il template estende base.html. Notiamo l'utilizzo nel template della variabile lista_contatti, contenente un array di modelli di tipo Contatto, ottenuto interrogando il database.

Nel template accediamo agli attributi pubblici degli oggetti di tipo Contatto mediante la dot-notation. Ricordiamo che i parametri vengono passati al template mediante la funzione built-in render_to_response che accetta due parametri: il Template da utilizzare e un dizionario avente chiavi il nome delle variabili utilizzate nel template. In questo modo possiamo utilizzare nei template variabili di un tipo qualsiasi previsto in Python: oggetti, dizionari, array, tuple, tipi primitivi.

Creiamo ora il template form.html:

form.html

{% extends "base.html" %}	

{% block title %} Inserimento/Modifica contatto {% endblock %}	

{% block content %}
  {% if error_message %}
    <p><strong>{{ error_message }}</strong></p>
  {% endif %}
  
  <form action="/rubrica/nuovo/" method="post">
  <table>
    <tr><td>Nome:</td><td><input type="text" name="nome" value=""/></td></tr>
    <tr><td>Cognome:</td><td><input type="text" name="cognome" value=""/></td></tr>
    <tr><td><input type="submit" value="Salva"/></td></tr>
  </table>    
  </form>    	

  <p>Torna alla <a href="/rubrica/">lista dei contatti</a></p>	
{% endblock %}

Creiamo il template detail.html:

detail.html

{% extends "base.html" %}

{% block title %}Dettaglio contatto {{ cont.nome }} {{ cont.cognome }} {% endblock %}

{% block content %}

  {% if cont %}
    <table>
    <tr><td>Nome:</td><td>{{ cont.nome }}</td><td<Cognome:</td><td>{{ cont.cognome }}</td></tr>
    {% for tel in lista_telefoni %}
      <tr><td>Telefono:</td><td>{{ tel.numero }}</td><td>Tipologia:</td><td>{{ tel.tipologia.descrizione }}</td></tr>
    {% endfor %}    
		</table>
  {% else %}
    <p>Nessun contatto presente in rubrica.</p>
  {% endif %}
  
  <p>Torna alla <a href="/rubrica/">lista dei contatti</a></p>
{% endblock %}

E l'ultimo template, formTelefono.html:

formTelefono.html

{% extends "base.html" %}

{% block title %} Inserimento numeri di telefono per {{ cont.nome }} {{ cont.cognome }} {% endblock %}

{% block content %}
  {% if idContatto %}
    {% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}
    
    <form action="/rubrica/nuovoNumero/" method="post">
    <table>
    {% for telefono in lista_telefoni %}
      <tr><td>Telefono:</td><td>{{ telefono.numero }}( {{ telefono.tipologia.descrizione }})</td></tr>
    {% endfor %}
    <tr><td>Telefono:</td>
        <td><input type="text" name="numero" value="{{ tel.numero }}" />
            <input type="hidden" name="idContatto" value="{{ idContatto }}" /></td>
        <td>Tipologia:</td>
        <td><select name="tipotelefono">
            {% for tipologia in lista_tipologia %}
              {% ifequal tel.tipologia_id tipologia.id %}
                <option value="{{ tipologia.id}}" selected>{{ tipologia.descrizione }}</option>                       
              {% else %}
                <option value="{{ tipologia.id}}">{{ tipologia.descrizione }}</option>
              {% endifequal %}
            {% endfor %}
            </select>
        </td>
    </tr>
    <tr><td><input type="submit" value="Salva"/></td></tr>
    </table>
    </form>
  {% else %}
    <p>Si è verificato un errore</p>
  {% endif %}
  
  <p>Torna alla <a href="/rubrica/">lista dei contatti</a></p>
{% endblock %}

Ti consigliamo anche