Le dev simple, efficace et élégant.

Les super pouvoirs des langages de template - partie 1

Dernière édition :

Table des matières

Cet article est le premier d'une série de 3 articles qui visent à te donner une bonne vue d'ensemble des possibilités offertes par les langages de templating côté serveur.

Dans cette série, nous verrons :

  1. A quoi servent les templates, et quels sont les principaux langages de templating disponibles.
  2. Comment injecter des données dans les pages HTML et comment gérer intelligemment leur disposition via l'héritage de template.
  3. Comment créer des composants réutilisables à l'aide de templates pour garder une architecture propre et maintenable côté serveur.

Sans plus attendre, commençons par la première partie.

A quoi servent les templates ?

Lorsqu'on crée un site ou une application, on cherche généralement à créer du code facile à lire, à tester et à maintenir. En particulier, la centralisation et la modularité du code sont très importantes. Les templates peuvent contribuer à cela de 3 façons :

Fonctionnalités des templates

Ces besoins sont apparus dès les débuts du développement web côté serveur avec les frameworks PHP, ASP.Net, Python, Ruby... Chacun de ces frameworks a proposé pour cela un moteur de template par défaut.

Les frameworks web serveurs classiques

Le templating s'est même ensuite immiscé côté client avec le langage JSX proposé par React, même s'il s'agit plus d'une syntaxe de transpilation en JavaScript que de templating.

Aujourd'hui, la structuration des applications web en composants est devenue la norme côté client, et elle est aussi de plus en plus courante côté serveur. C'est ainsi que des frameworks comme Blazor, Next.js, Nuxt.js et Svelte Kit permettent un rendu serveur (SSR) avec une structuration en composants pour répondre au besoin de structuration, maintenabilité et réutilisabilité du code.

Frameworks web orientés composants avec SSR

Note

Mais nous verrons que certains langages de templates permettent aussi d'implémenter la notion de composant avec les frameworks qui ne la proposent pas nativement ! C'est l'une des grandes forces des templates !

Un langage de template simple : le Markdown

Tu as peut-être déjà créé des templates sans le savoir si tu as écrit en Markdown. En effet, le Markdown est un langage de templating très simple pour créer des documents écrits aux formats HTML, PDF, Word, etc. Voici un petit extrait de Markdown avec des titres, des listes et des textes en gras (guide compet accessible ici) :

### Listes

**Liste à puces :**

- item 1
- item 2
- item 3

NB/ On peut aussi utiliser un + ou une * à la place du -. Le résultat est le même.

**Liste numérotée :**

1. item 1
2. item 2
3. item 3

On peut mettre des numéros différents ou laisser le numéro 1 sur chaque ligne. L'éditeur incrémente tout seul les numéros dans le rendu final.

### Liens hypertextes et images

Lien vers un autre site : [Markdown Guide](https://www.markdownguide.org/)

Intégration d'un fichier image : ![favicon](img/favicon.png)

Pour faire la transformation du Markdown en HTML, pas besoin d'un framework web complexe, un parser suffit. Des logiciels de gestion de notes comme Obsidian et Typora par exemple (mes préférés), intègrent un parser Markdown pour visualiser le rendu HTML en direct et éventuellement l'exporter dans d'autres formats.

Le Markdown est bien adapté à la création de documents ou pages simples, mais lorsqu'il s'agit de créer un site web avec des mises en page complexes, en intégrant des données variables dans les pages, on a besoin de langages de templating plus évolués. Je te propose donc un petit tour d'horizon rapide des principaux langages de template qui existent à ce jour.

Quels sont les principaux langages de template ?

On pourrait penser que chaque framework web a son langage de template et basta ! Sauf que la réalité est un peu plus complexe...

Chaque framework web a bien une syntaxe de template native. Le tableau suivant (non exhaustif) donne quelques exemples :

Framework web Langage Syntaxe de template native
Symfony PHP Twig
Spring Boot Java Thymeleaf
ASP.Net Core C# Razor
Ruby On Rails Ruby ERB (Embedded Ruby)
Django Python DTL (Django Template Language)
React JavaScript JSX

Mais certains frameworks prennent en charge d'autres syntaxes de template, et inversement, certaines syntaxes de template sont utilisables dans plusieurs frameworks !

Juste pour te donner une idée, le tableau suivant étend le précédent en indiquant les syntaxes de template pris en charge par les principaux frameworks web. Il précise pour chaque framework le langage de templating par défaut, et les autres langages utilisables si l'on ajoute les extensions correspondantes :

Framework Côté Langage Langages de templates pris en charge
Ruby on Rails serveur Ruby ERB (par défaut), Haml, Slim, Liquid
Django serveur Python DTL (par défaut), Jinja2
Flask serveur Python Jinja2 (par défaut), peut intégrer Mako, Cheetah
Laravel serveur PHP Blade (par défaut), Twig (via package), Smarty
Symfony serveur PHP Twig (par défaut), PHP natif
Express.js serveur JavaScript EJS (par défaut), Pug (anciennement Jade), Handlebars, Mustache, React/JSX
Spring Boot serveur Java Thymeleaf (par défaut), Freemarker, JSP, Mustache
React client JavaScript JSX (intégré, transpilé en JS)
Vue.js client JavaScript Templates Vue (.vue), JSX (optionnel), Mustache
Angular client TypeScript Templates Angular (HTML + syntaxe propriétaire)
Svelte client JavaScript Templates Svelte (.svelte), HTML enrichi

Remarque : Pour React, JSX n’est pas un moteur de template au sens classique, mais une syntaxe de transpilation JavaScript.

Note

Par ailleurs, en 2011, Mozilla a sorti le langage de template Nunjucks, un clone moderne de Jinja2 conçu pour les backends et générateurs de sites statiques (SSG) basés sur Node.js. Par exemple, le SSG Eleventy prend en charge Nunjucks (entre autres).

logo langage Nunjucks

Conclusion

Nous avons découvert les principaux usages du templating et un panorama des langages et frameworks associés. Dans la suite de cette série, nous verrons comment mettre en œuvre les concepts introduits ici, avec des exemples de code Nunjucks. Mais au-delà de la syntaxe, le plus important sera de comprendre les approches mises en œuvre, qui restent valables quel que soit le langage utilisé.

En attendant, si tu as apprécié cet article, merci de le liker pour aider à le faire connaître. 😉