tominardi.fr

Faire un site statique avec Django

31 janvier 2024

Je viens de refaire mon site pro. Je voulais quelque chose de rapide, facile à modifier, avec tous les outils dont je peux avoir besoin pour qu'il soit correctement référencé.

Mais j'ai aussi conscience que ça ne va pas être un site que je vais modifier tous les quatre matins.

C'est pourquoi j'ai décidé de faire un site HTML statique. En effet, on est devenu accro aux systèmes de gestion de contenus. Le choix par défaut, le plus simple, pour beaucoup, est Wordpress. Pourtant, pour la plupart des pages web, on n'a absolument pas besoin de quelque chose d'aussi lourd et complexe.

J'ai donc décidé de faire du HTML/CSS avec une pointe de VanillaJS.

J'ai quand même choisi d'utiliser Django pour réaliser ce site. En effet, ceci offre plusieurs avantages :

Pour démarrer le projet, c'est très rapide. Après avoir fait mon habituel django_admin startproject durey_info, j'ai été modifier mon fichier d'urls, en profitant de la vue générique TemplateView, qui se contente de retourner le rendu du template passé en paramètre :

from django.views.generic.base import TemplateView
from durey_info.views import ContactView

urlpatterns = [
    path('', TemplateView.as_view(template_name='pages/index.html'), name='home'),
    path('services/', TemplateView.as_view(template_name='pages/services.html'), name='services'),
    path('projets/', TemplateView.as_view(template_name='pages/projets.html'), name='projets'),
    path('a-propos/', TemplateView.as_view(template_name='pages/a-propos.html'), name='a-propos'),
    path('contact/', ContactView.as_view(), name='contact'),
    path('ressources/', TemplateView.as_view(template_name='pages/ressources.html'), name='ressources'),
    path('stack-technique/', TemplateView.as_view(template_name='pages/stack-technique.html'), name='tech'),
    path('mentions-legales/', TemplateView.as_view(template_name='pages/mentions-legales.html'), name='mentions-legales'),
]

Comme vous pouvez le voir, seule la page de contact a nécessité un peu de code, pour réaliser l'envoi d'email. Le reste, c'est juste de la configuration. Ce site ne nécessite pas de code serveur, il s'appuie uniquement sur l'existant, et un peu de configuration.

Dans les templates, c'est également très simple : on hérite d'un template de base, on réécrit des blocs. Le système de templating de Django est peut-être parfois décrié pour ses performances, mais ça reste un classique en termes d'utilisation. Et très vite, on a un thème complet.

J'ai fait le choix d'utiliser un bootstrap personnalisé via *sass. Aucun souci de ce côté, la gestion des fichiers statiques se fait aussi très simplement avec Django.

Une fois que j'étais content de mes contenus, j'ai réalisé qu'il y avait beaucoup de briques de Django dont je n'avais pas l'utilité. L'interface d'administration, les sessions, les messages, l'authentification. En fait, je n'ai même pas besoin de base de données. Pour optimiser tout ça, j'ai donc supprimé plusieurs réglages dans ma configuration :

Le site est ainsi optimisé, encore que je pourrais ajouter du cache quelque part pour éviter de faire le rendu des templates à chaque appel.

Pour la production, il faut un serveur python en plus d'un serveur web. Je suis parti sur nginx qui fait du reverse proxy vers un serveur gunicorn pour l'application python, et qui sert en parallèle tous les fichiers statiques.

Alors évidemment, ça reste plus complexe que de faire un site full HTML. Mais ça reste malgré tout très simple, et je pense que c'est une option à sérieusement considérer au moment de penser à la création d'un site. En fonction de la fréquence des modifications, de la nature des contenus et du profil des personnes réalisant les modifications, on devrait toujours se demander si un site statique n'est pas la meilleure option avant d'envisager un CMS ou du développement personnalisé.

Tumblr
Pinterest
LinkedIn
WhatsApp

<< Git Flow - Mon opinion en 2024 >> Modérer automatiquement des images en python avec nudenet

2022 - tominardi.fr