Vous pouvez me contacter via Facebook pour questions & suggestions : Page Facebook relative à mon site
Dans le précédent chapitre nous avons créé de nombreux templates mais ceux-ci n'avaient aucun rapport logique entre eux. L'objectif était simplement de vous montrer le rôle des templates : gérer les entrees/sorties ou en d'autres termes les saisies et les affichages.
Maintenant je vais vous montrer comment réaliser un site web avec le framework Flask. Il s'agira d'un site statique car aucune base de données est n'adossée.Ce qui signifie qu'il faut une intervention de l'administrateur du site pour que le contenu des pages évolue.
Ce site porte sur la biologie marine et plus précisèment sur l'embranchement des mollusques.
L'embranchement des mollusques qui appartient au règne animal, comprend trois principales classes : gastéropodes, bivalves & céphalopodes.
Les divisions HEADER & NAV ont un contenu identique dans les quatre pages !
Évoquons la structure de notre site.
Il y aura 5 fichiers .htm : un template pour chaque page (donc quatre) et un cinquième template contenant le code commun à toutes
les pages.
Une feuille de style externe est aussi nécessaire.
De nombreuses images sont intégrées dans les différentes pages.
Il faut aussi un script Python-Flask.
Créer à la racine de C: un nouveau dossier et nommez le "mollusques".
Au sein de ce répertoire, créez deux dossiers : "static" & "templates".
Dans le répertoire "static" créez deux sous-dossiers : "css" et "images"
À la racine du dossier "mollusques" il y aura le script "mollusques.py".
Il serait stupide d'avoir une feuille de style interne dans chaque page.
Il faut externaliser le CSS : feuille de style externe.
Dans le dossier "static/css" créez une feuille de style nommée "style.css".
Le code du fichier "style.css" :
@media screen { * {font-family : arial ; text-decoration : none ; color : navy ; margin :0px ; padding :0px;} body {min-height : 100vh; } img.grand {display : block ; width : 90% ; margin : 10px auto ; } img.centre {display : block ; width : 60% ; margin : 10px auto; } img.gauche {margin : 5px 1% ; vertical-align : top ; width : 30% ; } img.gauche:hover {transform : scale(2); } h1,h2 {text-align : center; line-height : 40px; } h1 {font-size : 1.4em; background : navy ; margin : 15px; color : white} h2 {font-size : 1.2em; background : skyblue ; margin : 10px ;} nav a {display : block ; background : silver ; line-height : 30px; text-align : center; margin : 10px auto ; } p {padding : 5px; text-align : justify; } p.titre {text-align : center; font-size : 200%; line-height : 100px; text-shadow : 5px 5px 5px gray;} header, nav, section{background : turquoise ; margin-top : 10px; } } @media screen and (min-width: 1001px) { *{font-size : 18px; } body {width : 1000px ; margin : 10px auto; } header {float : left ; width : 100%; } nav {float : left ; width : 24%; } section {float : right ; width : 74% ; } } @media screen and (max-width: 1000px) { * {font-size : 16px; } body { width : 100%; } header, nav, section {width : 100%; float : left; } }
Il existe aussi des effets visuels : les images de petite taille (classe "gauche") sont agrandies sur survol (img.gauche:hover {transform : scale(2); })
Rappel : il existe dans mon site un tuto sur le CSS qui traite entre autres des "media queries" : Tutoriel CSS3
Les fichiers jpg et png sont stockés dans le dossier "static/images".
Ils sont toujours stockés dans le dossier templates (dossier à la racine de "mollusques").
Ce fichier comprend le code commun à toutes les pages du site.
Pour toutes les pages la partie HEAD et les divisions HEADER & NAV de la partie BODY sont identiques.
Donc tout ce code commun doit être écrit une seule fois dans un template.
Par contre le code de la division SECTION diffère selon les pages.
Notez la valeur de l'attribut href de la balise link : {{url_for('static', filename ='css/style.css')}}.
Pour faire appel à des fichiers stockés dans le répertoire "static" Flask propose la méthode url_for().
Cette méthode, disponible au niveau des templates, génère une URL à partir des paramètres transmis.
Dans l'exemple l'url générée est : "/static/css/style.css"
Pour les éléments A de NAV chaque valeur de href correspond à la route. J'aurais pu employer aussi la méthode url_for().
La division SECTION ne contient qu'une instruction "block content" ...
Grâce aux media queries le rendu est différent selon qu'il s'agit d'un écran de plus ou de moins 1000px de large.
Les divisions NAV & SECTION sont côte à côte mais sous la division HEADER.
Les trois divisions sont les unes sous les autres ; chacune occupant toute la largeur de la page.
L'instruction {% extends "commun.htm" %} permet d'inclure le code de "commun.htm" dans cette page,
c'est ce qu'on appelle l'héritage. Si vous connaissez le langage PHP c'est l'équivalent des instructions require() & include()
Grâce à l'héritage le code de la page "index.htm" est très succinct et se résumé à l'héritage de "commun.htm" et au code
de la division SECTION.
Cette page intégre une image ; notez la valeur de l'attribut src : {{url_for('static', filename ='images/mollusques.jpg')}}
Donc la méthode url_for() permet de générer le chemin complet vers l'image, ici : "/static/images/mollusque.jpg".
Et oui, un moteur de template est un générateur de HTML.
Toujours l'héritage du fichier "commun.htm".
Notez que les images sont affectées de la classe "gauche".
Sur survol, une image voit sa taille doubler grâce à la règle de style :
img.gauche:hover {transform : scale(2); }
Aucune nouveauté par rapport à la page précédente.
J'utilise toujours la méthode url_for() pour générer le chemin complet vers chaque image.
Rien de nouveau dans le code ; toujours l'emploi systématique de la méthode url_for() pour générer chaque chemin vers l'image.
Il doit être enregistré à la racine du répertoire.
Il est ici fort simple en raison du nombre très limité de pages et au fait qu'il n'y a pas de traitements de données.
Le script :
Les codes des différentes routes se ressemblent et sont très succints : affichage simplement d'un template.
Vous pouvez récupérer le contenu du dossier "static" sous forme d'un zip.
Dossier "mollusques/static"
Après avoir installé le fichier décompressé sur votre PC dans un nouveau dossier, vous devrez écrire les templates (dans le sous-dossier "templates") et le script ("mollusques.py") à la racine.
Ouvrez le dossier "mollusques" ; double-cliquez sur "mollusques.py".
Le terminal windows s'affiche et précise que le serveur web local tourne sur le port 5000.
Basculez sur le navigateur et tapez dans la barre d'URL : localhost:5000
Puis vous naviguez entre les pages du site en cliquant sur les liens comme n'importe quel site.
Sélectionnez la page "les bivalves" ; faites un clic droit et sélectionnez "inspecteur" (pour accéder aux outils de développement) ; sélectionnez l'onglet "sources" .
Un code HTML standard s'affiche !
J'ose espérer que vous avez compris. Les instructions dans les différents templates permettent au moteur de template "Jinja" de générer du HTML standard.