Pourquoi j'ai choisi django pour ce site

publié le 29 June 2011

[en] In this post I explain why I decided to write a custom application to power this site, and why I did it in Django. I also reveal [warning: spoiler!] that the app powering this site consists of about 850 lines python code and 330 lines template code.

Comme promis, j'aimerais revenir sur les raisons qui m'ont poussé à développer ma propre application pour ce site - et à l'écrire en Django.

On pourrait penser que c'est principalement parce que j'aime écrire du code python - et que Django est un des meilleurs framework web sur le marché actuellement. On aurait peut-être pas tout tort, mais même si ces outils permettent d'écrire une application très rapidement, ça restera toujours plus long que d'installer un WordPress. Il fallait donc un peu plus que ça.

Avant de m'y mettre, j'avais quelques certitudes (en dehors d'évidences comme les urls significatives, le flux RSS, etc.):

  • Je voulais un blog (avec des tags, mais pas forcément de commentaires) et quelques fonctionnalités de CMS (gestion de pages dans une structure hiérarchique) - comme WordPress.
  • Je voulais un contenu assez riche pour mes pages et mes articles: titres long et court, texte court, le contenu lui-même... (comme par exemple dans MODx)
  • ... plus la possibilité d'écrire mes article en français ou en anglais avec ou non un résumé dans l'autre langue (comme le fait Stéphanie Booth).
  • Je voulais rédiger mes articles avec un langage de balisage léger. Je suis probablement à contre-courant, mais quelques années de WYSIWYG dans MODx m'ont montré que ça m'apportait plus de problème que de solutions.
  • Ce langage de balisage devait me permettre de facilement référencer d'autres articles ou pages du site (ce qui est très bien fait dans SPIP).
  • Je voulais un système de gestion des versions pour mes articles et mes pages.
  • Et pour me garder un espace d'expérimentation, je voulais un système de plugins (comme... tout le monde) qui me permette d'enrichir les fonctionnalités ponctuellement sur une page, sans alourdir l'ensemble du site.

... et on arrive là à un bout de réponse à la quesion initiale: s'il est plus rapide - et plus facile à maintenir - de déployer un WordPress vanilla que d'écrire sa propre application, cela devient moins clair s'il faut installer quinze extensions plus ou moins obscures pour obtenir le fonctionnement voulu.

Vous en doutez? peut-être devrais-je ajouter que pour développer une application répondant à ces critères - et dont vous avez le résultat sous les yeux - j'ai écrit

  • environ 850 lignes de python
  • environ 330 lignes de templates
  • 12 lignes de javascript

... et c'est tout, backend et frontend compris! (à cela s'ajoutent quelques centaines de lignes de CSS, mais comme j'avais une idée précise de ce que je voulais, je les aurais de toute façon écrites, quel que soit l'outil utilisé).

Ces chiffres sont ridiculement bas. Comment cela est-il possible?

  • D'abord parce que python est un langage élégant et très succinct
  • Ensuite parce que Django est un framework d'une puissance assez impressionnante. L'interface d'administration intégrée n'y est pas pour rien.
  • Enfin parce que ce qu'il est convenu d'appeler l'écosystème Django est d'une vivacité incroyable - et que de nombreuses fonctionnalités attendent bien sagement sur le net que vous les intégriez telles quelles à votre application.

Et cela répond du même coup à la deuxième partie de la question: pourquoi Django?

Il est à noter qu'au fil du développement, j'ai rajouté quelques fonctionnalités sympathiques (toujours dans le cadre du nombre de lignes ci-dessus!):

  • Génération automatique des rétroliens. Il suffit que je référence un autre article depuis ici pour que l'autre article contienne un lien vers celui-ci.
  • Interface d'administration "sympa" avec menus déroulants, drag-and-drop et autres (grâce principalement à django-admin-tools et des fonctionnalités choisies de feincms)
  • Un système qui ressemble un peu aux shortcodes de WordPress.
  • ... je m'arrête là sinon je vais faire des jaloux ;-)

Le résultat final est un outil de blog assez geeky qui ne conviendrait probablement pas à tout le monde... mais dans mon idée de faire des outils sur mesure qui correspondent à chacun, c'est assez cohérent!