Semaine 11

This commit is contained in:
gauvainboiche
2026-07-11 21:38:00 +02:00
parent d3d2416dea
commit 0d071d2843
281 changed files with 54412 additions and 0 deletions
@@ -0,0 +1,180 @@
# Exercice 3.3 - Jinja2 multi-pages
## Navigation + templates dynamiques (sans base de données)
---
## Objectifs pédagogiques
* structurer une application Flask avec plusieurs routes ;
* générer plusieurs pages HTML avec Jinja2 ;
* utiliser des templates réutilisables ;
* exploiter des données simulées côté serveur (Python) ;
* manipuler boucles et conditions dans Jinja2 ;
* construire une navigation entre pages ;
* séparer clairement logique serveur et affichage.
---
# Contexte
Vous développez une mini application de type **tableau de bord de gestion de parc informatique**.
Les données sont **simulées en mémoire (liste Python)**.
Lapplication doit permettre :
* dafficher une liste globale des équipements ;
* de voir uniquement les équipements actifs ;
* de consulter une page de détail par équipement ;
* de naviguer entre les pages via des liens HTML.
---
# Structure proposée
```
app.py
/templates
base.html
index.html
actifs.html
detail.html
```
---
# Travail demandé
---
## Étape 1 - Initialiser lapplication Flask
Créer une application Flask fonctionnelle.
Lapplication doit pouvoir afficher une page daccueil.
---
## Étape 2 - Créer les données simulées
Définir côté serveur une liste Python représentant des équipements.
Chaque équipement contient :
* un identifiant ;
* un nom ;
* un statut (actif / inactif) ;
* une catégorie (serveur, poste, réseau, etc.).
Ces données sont **fixes et non modifiables**.
---
## Étape 3 - Créer une structure de templates
Mettre en place :
* un template principal servant de base commune ;
* une structure avec bloc de contenu réutilisable ;
* un menu de navigation commun à toutes les pages.
Le menu doit permettre de naviguer entre les pages principales.
---
## Étape 4 - Page daccueil (liste complète)
Créer une route et une page affichant :
* la liste complète des équipements ;
* toutes leurs informations.
Dans le template :
* utiliser une boucle Jinja2 ;
* afficher chaque équipement dans un bloc structuré ;
* distinguer visuellement les équipements actifs et inactifs avec une condition.
---
## Étape 5 - Page “équipements actifs”
Créer une page dédiée affichant uniquement :
* les équipements actifs.
La logique de filtrage doit être réalisée côté serveur (Python), pas dans le template.
Dans le template :
* afficher uniquement les éléments fournis par la vue ;
* utiliser une boucle simple sans logique complexe.
---
## Étape 6 - Page de détail dun équipement
Créer une route dynamique permettant dafficher :
* un équipement spécifique selon son identifiant.
La page doit afficher :
* toutes les informations de l’équipement ;
* un message derreur si lidentifiant nexiste pas.
Dans le template :
* utiliser des variables Jinja2 ;
* utiliser une condition pour gérer le cas “non trouvé”.
---
## Étape 7 - Navigation entre pages
Dans le template principal :
* ajouter un menu de navigation commun ;
* permettre daccéder à toutes les pages ;
* assurer une cohérence visuelle sur toutes les vues.
---
## Étape 8 - Mise en forme Jinja2 obligatoire
Dans les templates, vous devez utiliser :
* des boucles `{% for %}` ;
* des conditions `{% if %}` ;
* des variables `{{ }}` ;
* au moins un bloc réutilisable (`block`) ;
* une logique de filtrage côté Python (obligatoire).
---
## Étape 9
Ajouter :
* une page “statistiques” affichant :
* nombre total d’équipements ;
* nombre dactifs ;
* nombre dinactifs ;
* un message conditionnel si la liste est vide dans une page.
---
# Livrables attendus
* application Flask fonctionnelle ;
* plusieurs routes Python ;
* 3 à 4 templates Jinja2 ;
* aucune base de données ;
* aucune méthode POST ;
* aucune modification de données.
---
# Compétences évaluées
| Compétence | Niveau attendu |
| ---------------------- | ------------------------------- |
| Flask routing | Plusieurs routes fonctionnelles |
| Jinja2 | Boucles + conditions maîtrisées |
| Architecture templates | base.html + héritage |
| Séparation logique/vue | filtrage côté Python |
| Navigation web | cohérence UX simple |
| Lecture de données | affichage structuré |