Les Template Partials dans Django 6.0

Django 6.0 introduit les template partials, des fragments de template nommés et réutilisables. On peut définir un bloc partiel une seule fois et l'inclure à plusieurs endroits dans le même template ou depuis d'autres templates, sans passer par un fichier séparé.

Syntaxe

On définit un partial avec {% partial nom %} et on l'inclut avec {% partialblock nom %}. Les partials acceptent des paramètres pour être réutilisables dans différents contextes.

htmldjango
{# templates/base.html #}

{# Définition d'un partial réutilisable #}
{% partial card %}
  <div class="card">
    <h3>{{ card_title }}</h3>
    <p>{{ card_body }}</p>
    {% if card_link %}
      <a href="{{ card_link }}">En savoir plus</a>
    {% endif %}
  </div>
{% endpartial %}

{# Utilisation dans le même template #}
<div class="grid">
  {% partialblock card with card_title="Produit A" card_body="Description..." card_link="/a" %}
  {% partialblock card with card_title="Produit B" card_body="Autre produit" %}
</div>

Exemple pratique : composant de liste

Les partials sont particulièrement utiles pour créer des composants d'interface récurrents comme des badges, des alertes ou des éléments de liste. Ils remplacent avantageusement les {% include %} qui nécessitaient des fichiers séparés.

htmldjango
{# templates/dashboard.html #}
{% extends "base.html" %}

{% partial stat_badge %}
  <span class="badge badge-{{ badge_color }}">
    {{ badge_label }} : {{ badge_value }}
  </span>
{% endpartial %}

{% block content %}
  <h1>Tableau de bord</h1>
  <div class="stats">
    {% partialblock stat_badge with badge_color="green" badge_label="Actifs" badge_value=active_count %}
    {% partialblock stat_badge with badge_color="red" badge_label="Erreurs" badge_value=error_count %}
    {% partialblock stat_badge with badge_color="blue" badge_label="Total" badge_value=total_count %}
  </div>
{% endblock %}

Sources