Come abbiamo accennato i Tag servono per gestire il controllo di flusso della costruzione della pagina a seconda delle informazioni ricevute dalla View. Oltre a questo vedremo alcune altre funzionalità molto potenti di questo strumento.
La sintassi tipica di un Tag è questa:
{% tag %} ... contenuto ... {% endtag %}
Alcuni tag generano output, altri sono utilizzati per eseguire cicli e istruzioni condizionali. Esaminiamo i principali tag predefiniti.
Il ciclo for ci permette la classica iterazione sugli array.
Esempio di ciclo for
<ul>
{% for contatto in lista_contatti %}
<li> {{ contatto.nome }} </li>
{% endfor %}
</ul>
Il costrutto if/else, ci permette di effettuare un rendering condizionale della pagina.
{% if lista_contatti %}
Numero di contatti in rubrica: {{ lista_contatti|length }}
{% else %}
Non ci sono contatti in rubrica.
{% endif %}
ifequal/ifnotequal, verifica l'uguaglianza degli argomenti.
{% ifequal contatto.nome "Fabio" %}
<!-- contenuto ... -->
{% endifequal %}
block e extends, definiscono l'ereditarietà tra template, cioé un template estende un template base, ridefinendo le sezioni block.
Nei template si possono inserire dei commenti, indicati con {# .... #}.
Vediamo ora un esempio che mostra i concetti presentati. Definiamo il template base.html che utilizziamo come contenitore principale e il template esempio_templ.html, in cui visualizziamo una particolare View; il secondo estende il primo.
base.html
<html>
<head>
<title>{% block titolo %} Titolo {% endblock %}</title>
</head>
<body>
{% block contenuto %} Contenuto {% endblock %}
</body>
</html>
Vediamo come estendere ed effettuare l'override dei blocchi del template base:
esempio_templ.html
{% extends "base.html" %} {% block title %}{{ sezione.titolo }}{% endblock %} {% block content %} <h1>{{ sezione.titolo }}</h1> {% for item in variabile %} <h2> <a href="{{ item.get_absolute_url }}"> {{ item.descrizione }} </a> </h2> <p>{{ item.info|truncatewords:"30" }}</p> {% endfor %} {% endblock %}
In pratica il tag extends indica il template radice. Il tag block definisce un blocco nel template base (si può considerare come un segnaposto) e lo stesso tag nel template foglia definisce il contenuto per il blocco. Ogni blocco è definito dal nome del blocco che lo deve identificare univocamente.
Vediamo ora come utilizzare i template in una View. Una View che utilizza un template deve contenere l'invocazione della funzione render_to_response a cui deve essere passato il template da utlizzare e un dizionario contenente le variabili utilizzate nel template.
Ad esempio, il template esempio_templ.html può essere utilizzato dalla View miavista() nel modo seguente:
def miavista(request):
# ...
return render_to_response("esempio_templ.html", {'sezione':{'titolo':...}, variabile: []})
I templates devono essere memorizzati in una cartella del progetto, ad esempio miosito/templates e bisogna aggiungere tale directory alla variabile TEMPLATE_DIRS definita nel file miosito/settings.py.
Se vuoi aggiornamenti su Development inserisci la tua email nel box qui sotto: