logo oujood
🔍

Ajouter des membres et afficher les données

La table Membres existe mais est vide. Dans ce chapitre, vous allez y insérer des enregistrements via le shell Django, afficher les données dans une vue, puis les rendre dans un vrai template HTML avec les balises de template Django.

OUJOOD.COM

Insérer des données via le shell Django

Pour l'instant, la table membres_membres est vide. Avant de construire une interface utilisateur, le plus rapide pour la remplir est d'utiliser le shell interactif Django — un interpréteur Python qui charge automatiquement tout votre projet.

Depuis le dossier contenant manage.py, lancez :

  📋 Copier le code

python manage.py shell

Un prompt >>> s'affiche. Importez d'abord le modèle, puis vérifiez que la table est bien vide :

  📋 Copier le code

# Importer le modèle Membres
>>> from membres.models import Membres

# Vérifier le contenu de la table — renvoie un QuerySet vide
>>> Membres.objects.all()
<QuerySet []>

Un QuerySet est une collection de données issue d'une base de données. Vide pour l'instant — c'est attendu. Pour en savoir plus, consultez le chapitre sur les QuerySets Django.

Ajouter un premier enregistrement

Pour créer un membre, instanciez le modèle avec les valeurs des champs, puis appelez .save() pour écrire en base :

  📋 Copier le code

>>> membre = Membres(prenom='Emil', nom='Refsnes', mail='emil@monemail.com')
>>> membre.save()

# Vérifier que l'enregistrement est bien présent
>>> Membres.objects.all().values()
<QuerySet [{'id': 1, 'prenom': 'Emil', 'nom': 'Refsnes', 'mail': 'emil@monemail.com'}]>

.save() déclenche un INSERT INTO SQL. Sans cet appel, l'objet existe en mémoire mais n'est pas enregistré en base. L'id est attribué automatiquement par Django.

Ajouter plusieurs enregistrements

Pour insérer plusieurs membres en une fois, créez les objets, mettez-les dans une liste, puis bouclez sur .save() :

  📋 Copier le code

>>> membre1 = Membres(prenom='Martin',  nom='Dubois', mail='martin@monemail.com')
>>> membre2 = Membres(prenom='Bernard', nom='Durand', mail='bernard@monemail.com')
>>> membre3 = Membres(prenom='Robert',  nom='Morin',  mail='robert@monemail.com')
>>> membre4 = Membres(prenom='Salah',   nom='Bailly', mail='salah@monemail.com')

>>> liste = [membre1, membre2, membre3, membre4]
>>> for x in liste:
...     x.save()

# Vérifier les 5 membres
>>> Membres.objects.all().values()
<QuerySet [
  {'id': 1, 'prenom': 'Emil',    'nom': 'Refsnes', 'mail': 'emil@monemail.com'},
  {'id': 2, 'prenom': 'Martin',  'nom': 'Dubois',  'mail': 'martin@monemail.com'},
  {'id': 3, 'prenom': 'Bernard', 'nom': 'Durand',  'mail': 'bernard@monemail.com'},
  {'id': 4, 'prenom': 'Robert',  'nom': 'Morin',   'mail': 'robert@monemail.com'},
  {'id': 5, 'prenom': 'Salah',   'nom': 'Bailly',  'mail': 'salah@monemail.com'}
]>

Quittez le shell avec quit() quand vous avez terminé.

Afficher les données dans une vue

Le shell est pratique pour tester, mais les données doivent s'afficher dans le navigateur. Ouvrez membres/views.py et modifiez la vue index pour récupérer tous les membres et les passer à un template :

  📋 Copier le code

from django.http import HttpResponse
from django.template import loader
from .models import Membres

def index(request):
    # Récupérer tous les membres de la base de données
    mesmembers = Membres.objects.all().values()
    template = loader.get_template('index.html')
    # Le contexte transmet les données au template
    context = {
        'mesmembers': mesmembers,
    }
    return HttpResponse(template.render(context, request))

Le dictionnaire context est le canal de transmission entre la vue et le template. Les clés de ce dictionnaire deviennent des variables accessibles dans le HTML — ici, mesmembers sera disponible dans le template.

Créer le template index.html

Dans membres/templates/, créez le fichier index.html avec ce contenu :

  📋 Copier le code

<!DOCTYPE html>
<html>
<head>
    <title>Liste des membres</title>
</head>
<body>
<h1>Mes membres</h1>

<table border="1" style="border-collapse: collapse;">
    <tr>
        <th>ID</th>
        <th>Prénom</th>
        <th>Nom</th>
        <th>Email</th>
    </tr>
    {% for x in mesmembers %}
    <tr>
        <td>{{ x.id }}</td>
        <td>{{ x.prenom }}</td>
        <td>{{ x.nom }}</td>
        <td>{{ x.mail }}</td>
    </tr>
    {% endfor %}
</table>

</body>
</html>

Deux syntaxes Django apparaissent ici pour la première fois :

{% for x in mesmembers %} ... {% endfor %} — une balise de template. Le code entre {% et %} est de la logique exécutée par Django côté serveur : boucles, conditions, inclusions. Le navigateur ne voit jamais ces balises.

{{ x.prenom }} — une variable de template. Django remplace {{ }} par la valeur correspondante avant d'envoyer le HTML. Ici, x est l'objet membre courant de la boucle.

Résultat dans le navigateur

Démarrez le serveur et ouvrez http://127.0.0.1:8000/membres/ :

  📋 Copier le code

python manage.py runserver

Le tableau HTML s'affiche avec les 5 membres. La vue interroge la base, transmet les données au template via le contexte, le template génère le HTML final. Le cycle MVT complet est bouclé.

Par carabde | Mis à jour le 05 mai 2025