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

I Tag

Gerarchie di template, utilizzo di costrutti e collegamento con le View
Gerarchie di template, utilizzo di costrutti e collegamento con le View
Link copiato negli appunti

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.

Ti consigliamo anche