Quand un développeur Odoo te parle de QWeb, il a un peu l'air d'invoquer un sortilège. Le nom n'aide pas. Q comme quoi ? Web comme on s'en doute. En réalité, c'est probablement la chose la plus simple et la plus puissante de tout Odoo, à condition de comprendre une seule idée : QWeb, c'est du HTML qui sait penser. Pas plus, pas moins. Voici le tour complet, sans pollution de jargon.
C'est quoi, vraiment.
QWeb est le moteur de templates d'Odoo. Un template, c'est juste un fichier qui décrit à quoi ressemble une page, avec des trous dedans pour mettre des données qui changent. Pense au modèle de facture Word de ton comptable : la structure est figée, mais les chiffres et les noms changent à chaque client. Sur le web, c'est pareil : la page produit d'une boutique a toujours le même squelette, mais le titre, le prix et la photo changent selon le produit affiché.
Concrètement, un fichier QWeb a l'extension .xml et ressemble à du HTML. Si tu sais lire
Bonjourt-. Ce sont eux qui font la magie. Quand le navigateur reçoit la page, ces attributs ont disparu : Odoo les a transformés en vrai HTML avant l'envoi.
QWeb n'est pas un langage compliqué qu'on apprend des mois. C'est du HTML enrichi de six ou sept mots-clés. Une fois compris, tu lis n'importe quel template Odoo comme un livre ouvert.
La syntaxe en cinq balises.
Tout QWeb tient dans une poignée d'attributs. Si tu retiens ceux-là, tu comprends 95% du code que tu croiseras. Les voici, dans l'ordre où on les rencontre vraiment.
- t-name Le nom du template. C'est la clé qui permet à Odoo de le retrouver. Comme un identifiant unique dans une bibliothèque.
- t-call Pour insérer un autre template à l'intérieur de celui-ci. Très utile pour appeler le layout commun du site (header, footer) sans le réécrire.
- t-field Affiche un champ depuis la base de données. Le nom du produit, le prix, la photo : tout ce qui vient de l'ERP.
- t-if Affiche le bloc seulement si une condition est vraie. Exemple : montrer la promo seulement si le produit est en solde.
- t-foreach Répète un bloc autant de fois qu'il y a d'éléments dans une liste. La grille des produits, la liste des articles de blog, les langues du menu.
- t-set Définit une variable réutilisable dans le template. Pratique pour les titres SEO ou les classes CSS conditionnelles.
Ces six mots, en vrai, c'est tout. Le reste — t-att, t-options, t-esc — sont des cousins qui te dépanneront un jour, mais qui ne sont pas essentiels pour lire un template. Si tu connais les six du dessus, tu comprends ce que fait n'importe quelle page Odoo.
Un exemple concret, ligne par ligne
Voici à quoi ressemble un mini template QWeb qui affiche une grille de produits. Lis-le comme du HTML avec des annotations dedans.
Si tu lis ça comme une recette : « créer une section, pour chaque produit, faire une carte avec son nom et son prix, et s'il est en solde, afficher le badge ». C'est tout. Pas de magie noire. Juste du HTML qui sait répéter et conditionner.
Hériter sans casser.
Voilà la fonctionnalité de QWeb qui justifie tout le reste : l'héritage. Tu peux prendre n'importe quel template livré par Odoo et le modifier sans le toucher. Tu écris un petit fichier à côté qui dit « dans le template d'origine, à tel endroit, ajoute ça, remplace ceci ». Et Odoo s'occupe d'assembler tout proprement à chaque affichage.
Pourquoi c'est révolutionnaire ? Parce que quand Odoo sort une nouvelle version, le template d'origine est mis à jour par l'éditeur, et ton petit fichier de surcharge survit. Tu n'as rien cassé. Tu n'as pas dupliqué le code. Tu as juste posé une couche de personnalisation par-dessus. C'est ce qui permet à WebNest de modifier en profondeur l'apparence d'un site Odoo sans rendre les futures montées de version douloureuses.
Tout dupliquer.
Tu recopies le template entier, tu modifies, tu publies. Le jour où Odoo met à jour, ta version diverge et il faut tout refaire à la main.
- Maintenance douloureuse à chaque upgrade
- Risque élevé de bugs silencieux
- Code dupliqué partout
Surcharger chirurgicalement.
Tu décris ce que tu veux modifier dans le template d'origine. Odoo applique ta surcharge au moment du rendu. Le template natif reste intact.
- Upgrade Odoo sans casse
- Personnalisation lisible et localisée
- Reprise possible par n'importe qui
L'héritage QWeb, c'est la mécanique discrète qui rend un site Odoo vraiment maintenable.
Pourquoi Odoo a choisi ça.
Il existait déjà des moteurs de templates très populaires côté Python : Jinja, Mako, Chameleon. Odoo aurait pu en prendre un. Pourquoi avoir développé QWeb maison ? Parce que la contrainte de départ était différente : les templates devaient être éditables par un non-développeur, depuis l'interface web d'Odoo. Pas dans un éditeur de code. Pas avec une syntaxe obscure de moteur Python.
Du coup, la décision a été simple : un template QWeb doit ressembler à du HTML pur. N'importe quel intégrateur, designer ou administrateur curieux peut l'ouvrir, comprendre ce qui se passe, et modifier un texte ou une classe CSS sans rien casser. Les attributs t- sont là pour la mécanique, mais ils ne polluent pas la lecture. C'est élégant.
Autre atout que peu de gens mesurent : QWeb sert autant pour les pages web que pour les rapports PDF et les emails transactionnels. La facture envoyée à ton client, l'email de bienvenue, la page d'accueil : tout passe par le même moteur. Une seule grammaire à apprendre, trois usages couverts. C'est rare.
Ce que ça permet concrètement.
Tout ce qui rend un site WebNest reconnaissable repose sur QWeb. Voici ce qu'on en fait, projet après projet, et pourquoi ça compte pour toi si on travaille ensemble.
- Des templates de page entièrement nouveaux qui remplacent les templates standards d'Odoo. La page produit de ton e-commerce, la fiche d'un événement, le détail d'une offre d'emploi : on en écrit une version qui te ressemble, et on la branche au moteur Odoo. Toutes tes données restent connectées.
- Des surcharges chirurgicales sur les pages qu'on ne veut pas refaire entièrement. Le panier, le checkout, le compte client : on garde la mécanique d'Odoo qui fonctionne, on change le habillage. Le client a la performance native et un visuel sur mesure.
- Des blocs réutilisables qu'on appelle avec
t-callsur plusieurs pages. Le hero, la section témoignages, le footer : un seul fichier source, dix endroits qui l'utilisent. Tu changes une virgule au hero, ça se répercute partout. - Des emails et factures aux mêmes codes graphiques que le site. Parce que QWeb les anime aussi, on peut harmoniser. Le client reçoit une facture qui n'a pas l'air d'avoir été générée par un autre logiciel que ton site.
Si tu es intégrateur Odoo et que tu lis ça : une bonne maîtrise de l'héritage QWeb, c'est probablement le meilleur retour sur investissement front-end que tu puisses faire en 2026. Tes clients sentent immédiatement la différence entre un site qui dupliquait et un site qui surcharge proprement.
Ce qu'il faut retenir.
Si tu ne dois retenir que trois choses de cet article, voilà lesquelles. D'abord, QWeb n'est pas un truc obscur réservé aux développeurs Odoo. C'est du HTML qui sait penser, avec six mots-clés à apprendre. Tu peux ouvrir n'importe quel template livré par Odoo et le lire comme un livre.
Ensuite, l'héritage est la vraie magie. C'est ce qui permet à une agence sérieuse de personnaliser ton site sans hypothéquer tes futures montées de version. Si on te propose un site Odoo qui duplique les templates au lieu de les surcharger, fuis : tu paieras la dette plus tard.
Enfin, QWeb est un avantage compétitif réel, pas une contrainte. Un moteur unique pour le site, les emails et les PDF, c'est rare et précieux. C'est aussi ce qui nous permet, chez WebNest, de livrer des sites radicalement sur mesure tout en restant 100% dans l'écosystème Odoo. Pas de couche externe, pas de hack. Juste du QWeb bien écrit.