Générateur de site statique c'est quoi?
Un générateur de site statique (ou GSS ) c'est un concept merveilleux. Au lieu d'écrire votre contenu dans une base de données puis de la proposer à travers un serveur dynamique comme pourrait le faire un CMS, vous écrivez votre contenu dans des fichiers , et un script se charge de construire votre site -en fonction de fichier(s) de configuration-.
Un des avantages de ce système est l'entière gratuité de votre projet. Vous pouvez héberger par exemple votre projet chez gitlab qui propose un hébergement gratuit pour les fichiers statiques. Votre site est à l'abris de piratages divers et assure une très haute disponibilité puisque vous pouvez mettre l'intégralité de votre site web en cache (à travers cloudeflare par exemple).
Un autre avantage est également le versionnage de vos fichiers avec git , si vous vous débrouillez bien coté script sur gitlab, vous pouvez mettre à jour votre site à chaque commit.
Les acteurs du moment dans le monde GSS sont Hugo et Jekyll .
Hugo, le boss
On va pas se mentir Hugo c'est le plus rapide. Ecrit en GO il est surpuissant et c'est bluffant de rapidité. En revanche vous remarquerez rapidement que le langage template est insupportable, j'ai vite abandonné (peut être trop vite). Quand on est habitué au magnifique moteur de template de Django, on ne peut plus travailler avec des moteurs à la logique laborieuse. Hugo est conseillé pour les projets d'envergure ayant des milliers de pages.
Jekyll
Alors j'avoue j'ai joué une journée avec et après je me suis dit... mais pourquoi travailler sur un projet écrit en Ruby qui finalement ne fait rien de très compliqué (convertir des .md en .html ) autant prendre un projet en python . Python c'est la vie. Mais je n'ai rien trouvé de vraiment intéressant...
Du coup je me suis dit, bon je suis programmeur, je vais faire mon propre GSS. Et après tout nous sommes sur un site qui vante les mérites de python, tant pis pour Ruby .
La bricole python
J'ai crée un projet Django pour avoir son moteur de template mais également les lib associées avec pour créer des scripts qui me construisent mon site comme je l'entends.
Finalement cela m'a pris quelques heures et l'avantage c'est que je peux faire ce que je veux. Je ne dois pas renseigner de .yaml dont je ne comprends rien et lire des km de documentation.
Il est important de travailler avec des outils que l'on maîtrise à 100%. Rien n'est plus frustrant que de passer des heures à comprendre, trouver et réparer un bug sur du code non métier.
Combien de framework vous promettent de réaliser un projet simplement / rapidement... et sur sur le terrain oui, c'est efficace pour les choses simples mais dès qu'on monte en besoins plus complexes, c'est la cata faut faire des surcharges dans tous les sens et on rapidement perdu.
Si vous maîtrisez votre code, vous pouvez contourner ce problème on vous taillant un costume sur mesure.
Mais comment on construit un projet GSS?
Je ne vais pas vous partager mon code tout fait, il n'y a rien de vraimennt intéressant. Mais l'idée est d'écrire vos pages dans un dossier consacré. Vos pages doivent être au format .md
Ensuite installez la lib markdown2
pip install markdown2
Puis implémenter dans votre code la lib
import markdown2
Récupérez le contenu de votre fichier .md puis convertissez le en html:
page_rendered = markdown2.markdown(content)
Puis écrivez le rendu dans un autre dossier public que vous delivrez sur votre site.
A vous d'utiliser votre savoir en Django pour faire un site aux petits oignons, qui remplit les balises Meta en fonction d'un seul fichier qui réunit toutes les informations de votre site. Personnelement j'ai tout centralisé dans un json.
Conclusion
Si vous devez faire un site rapidement les solutions Hugo et Jekyll sont parfaites. Un thème est intégré de base, vous ferez un site présentable et pro en quelques minutes si vous maitrisez l'outil. Il sera optimisé SEO.
Pour des projets à long terme où vous devez maitriser votre code à 100%, je vous conseillerai de créer votre propre GSS, comme je l'ai fait pour ce site (qui mixte markdown et html). Prendre du plaisir à travailler sur son projet est primordial. Si vous ne voulez pas vous perdre dans de la documentation ou dans des bugs de langages que vous ne maitrisez pas, offrez-vous votre propre GSS en python, en plus c'est ludique.