11. Ereditarietà tra Templates

Ora che il nostro "motore" è praticamente pronto, ciò che possiamo fare e dare una bella passata di semplificazione anche alla "carrozzeria"! Con questo intendo che andremo ad alleggerire i nostri template html usando l'ereditarietà tra template accessibile in Django mediante l'utilizzo dei tag del Django template engine.


Modifichiamo i template in modo tale che ereditino da base.html

Il concetto è semplice: abbiamo un template base.html da cui ereditano tutti gli altri template. Il codice viene ereditato tramite l'utilizzo dei tag. Il tutto funziona come una finestra: i template figli avranno una finestra che da sul template genitore, facendoci risparmiare un sacco di tempo in fase di styling.

base.html

Questo è il template genitore! I vari tag vengono quindi ereditati da tutte le classi figlie che "estendono" questo template genitore, mediante il tag {% extends "base.html" %}.

<!--DOCTYPE html -->
<html>

    <title>{% block head_title %}My Django Blog{% endblock head_title%}</title>

    <body>
        <div class="container">
            {% block content %}
            {% endblock content %}
        </div>
    </body>

</html>

lista_post.html

{% extends "base.html" %}

{% block content %}

    {% for object in object_list %}
        <h1><a href="{{object.get_absolute_url}}">{{object.titolo}}</a></h1>
        {{ object.data }}
        {{ object.contenuto|safe|linebreaks|truncatewords_html:50 }}
    {% endfor %}

{% endblock content %}

post_singolo.html

{% extends "base.html" %}

    {% block head_title %}{{ block.super }} | {{ object.titolo }}{% endblock head_title %}

    {% block content %}

        <h1>{{ object.titolo }}</h1>
        <h4>{{ object.data }}</h4>
        {{ object.contenuto|safe|linebreaks }}

    {% endblock content %}

contatti.html

{% extends "base.html" %}

{% block head_title %}{{ block.super }} | Contatti{% endblock head_title %}


{% block content %}

    <h1>Contattaci alla mail:</h1>
    <h2>Mail: mia mail</h2>

{% endblock content %}

Nella prossima lezione faremo in modo che il nostro progetto possa fare uso di file statici come fogli di stile CSS e immagini.