Wanneer een Odoo-ontwikkelaar je vertelt over QWeb, lijkt het alsof hij een spreuk oproept. De naam helpt niet. Q als wat? Web zoals je zou verwachten. In werkelijkheid is het waarschijnlijk het eenvoudigste en krachtigste van heel Odoo, op voorwaarde dat je één idee begrijpt: QWeb is HTML dat kan denken. Niet meer, niet minder. Hier is de volledige rondgang, zonder jargon.
Wat is het, echt.
QWeb is de sjabloonmotor van Odoo. Een sjabloon, is gewoon een bestand dat beschrijft hoe een pagina eruitziet, met gaten erin om veranderlijke gegevens in te voegen. Denk aan het Word-factuursjabloon van je boekhouder: de structuur is vast, maar de cijfers en namen veranderen per klant. Op het web is het hetzelfde: de productpagina van een winkel heeft altijd hetzelfde skelet, maar de titel, prijs en foto veranderen afhankelijk van het weergegeven product.
Concreet heeft een QWeb-bestand de extensie.xmlen lijkt op HTML. Als je kunt lezen
Hallot-. Dat zijn zij die de magie maken. Wanneer de browser de pagina ontvangt, zijn deze attributen verdwenen: Odoo heeft ze omgezet in echte HTML voordat ze werden verzonden.
QWeb is geen ingewikkelde taal die je maandenlang moet leren. Het is HTML verrijkt met zes of zeven sleutelwoorden. Eenmaal begrepen, lees je elk Odoo-sjabloon als een open boek.
De syntax in vijf tags.
Alles in QWeb past in een handvol attributen. Als je die onthoudt, begrijp je 95% van de code die je tegenkomt. Hier zijn ze, in de volgorde waarin je ze echt tegenkomt.
- t-name De naam van de template. Het is de sleutel die Odoo in staat stelt om het te vinden. Zoals een unieke identificatie in een bibliotheek.
- t-call Om een andere template binnen deze in te voegen. Zeer nuttig om de gemeenschappelijke lay-out van de site (header, footer) aan te roepen zonder deze opnieuw te schrijven.
- t-field Toont een veld uit de database. De naam van het product, de prijs, de foto: alles wat uit de ERP komt.
- t-if Toont het blok alleen als een voorwaarde waar is. Voorbeeld: toon de promotie alleen als het product in de aanbieding is.
- t-foreach Herhaalt een blok zoveel keer als er elementen in een lijst zijn. De productgrid, de lijst van blogartikelen, de talen van het menu.
- t-set Definieert een herbruikbare variabele in de template. Handig voor SEO-titels of voorwaardelijke CSS-klassen.
Deze zes woorden, in feite, dat is alles. De rest —t-att, t-options, t-esc— zijn neven die je ooit zullen helpen, maar die niet essentieel zijn om een template te lezen. Als je de zes hierboven kent, begrijp je wat elke Odoo-pagina doet.
Een concreet voorbeeld, regel voor regel
Dit is hoe een mini QWeb-template eruitziet dat een productgrid toont. Lees het als HTML met annotaties erin.
Als je dit als een recept leest: „maak een sectie aan, maak voor elk product een kaartje met de naam en de prijs, en als het in de aanbieding is, laat dan het badge zien”. Dat is alles. Geen zwarte magie. Gewoon HTML die kan herhalen en voorwaarden kan stellen.
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.