Overslaan naar inhoud

HTML Field in Odoo: De Complete Gids

Een complete gids over het Html-veld in het Odoo-datamodel: wat het is, hoe je het inzet en hoe je het technisch aanpast voor jouw bedrijfsbehoeften
6 maart 2026 in
HTML Field in Odoo: De Complete Gids
Dasolo
| Nog geen reacties

Introductie


Als je een productpagina in een Odoo-webshop bekijkt, zie je vaak nette opsommingen, koppen en ingevoegde afbeeldingen — dat alles komt uit één speciaal dataveld: het Html-veld. Het is een van de meest flexibele veldtypes in Odoo en duikt op plekken op waar gebruikers het niet meteen verwachten.


In tegenstelling tot gewone tekstvelden die alleen platte tekst bewaren, slaat het Html-veld rijk opgemaakte inhoud op, met tags en structuur. Daarom gebruik je het overal waar mensen opgemaakte, gestructureerde tekst nodig hebben: productomschrijvingen, e-mailtemplates, interne notities of blokken op de website.


Deze handleiding legt uit wat het Html-veld precies is, hoe Odoo het in de ORM en database afhandelt, waar het in echte bedrijfsprocessen terugkomt en hoe je het toevoegt of aanpast via Odoo Studio of met Python. Ook wijzen we op de meest gemaakte fouten bij het werken met dit veldtype.

Wat is het Html-veld in Odoo


Binnen de Odoo ORM is het Html-veld bedoeld om geformatteerde HTML op te slaan. De onderliggende kolom in PostgreSQL is een TEXT-kolom en de waarde is een HTML-string. Odoo zorgt zelf voor de weergave en het schoonmaken van de invoer, zodat gebruikers een rijke teksteditor zien in plaats van ruwe HTML-code.


Voor gebruikers verschijnt het Html-veld als een WYSIWYG-editor: opmaakknoppen voor vet, cursief, koppen, lijsten, links, tabellen en de mogelijkheid om afbeeldingen toe te voegen. Alles wat de gebruiker maakt, wordt achter de schermen opgeslagen als gestructureerde HTML.


In een Python-model ziet een velddefinitie er bijvoorbeeld zo uit:

from odoo import fields, models

class ProductTemplate(models.Model):
    _inherit = 'product.template'

    x_technical_specs = fields.Html(
        string='Technical Specifications',
        sanitize=True,
        sanitize_tags=True,
    )

Het argument string bepaalt het label dat gebruikers zien. De sanitize-optie bepaalt of Odoo potentieel schadelijke HTML verwijdert voor het opslaan — dit is een belangrijke beveiligingsmaatregel en staat standaard aan.


In Odoo Studio heet dit veldtype vaak Html of Rich Text. Studio voegt custom velden toe met een x_studio_-prefix, terwijl je bij Python- of API-definities zelf de technische naam kiest.

Hoe het veld werkt


Bij het aanmaken van een Html-veld maakt Odoo een TEXT-kolom aan in PostgreSQL zonder vaste lengtebeperking, wat het geschikt maakt voor langere teksten. De frameworklaag zorgt voor sanitizatie voordat de waarde in de database wordt weggeschreven.


Sanitizatie en veiligheid

Een onderscheidend kenmerk van het Html-veld is de ingebouwde sanitizatie. Standaard filtert Odoo tags en attributen die voor XSS-gevaren kunnen zorgen. Dat gedrag wordt geregeld via specifieke veldattributen.

  • sanitize: Als True (standaard) past Odoo het volledige schoonmaakproces toe bij opslaan. Schakel dit alleen uit als je zeker weet dat de inhoud uit een volledig vertrouwde bron komt en ruwe HTML noodzakelijk is.
  • sanitize_tags: Als True verwijdert Odoo tags die niet op de toegestane lijst staan. Uitschakelen laat willekeurige tags toe, maar brengt veiligheidsrisico’s met zich mee.
  • sanitize_attributes: Bepaalt of ook attributen op HTML-tags gefilterd worden.
  • sanitize_style: Regelt of inline style-attributen gereinigd worden; sommige CSS-eigenschappen blijven standaard toegestaan, andere worden verwijderd.
  • strip_style: Als True verwijdert Odoo alle inline style-attributen volledig.
  • strip_classes: Als True worden alle CSS-class-attributen uit de opgeslagen HTML gehaald.

Door deze sanitizatie is het Html-veld veilig genoeg om te gebruiken voor door gebruikers gegenereerde inhoud — daarom zie je het veel op klantgerichte formulieren en e-mailtemplates binnen Odoo.


Belangrijke veldopties

Naast sanitizatie deelt het Html-veld veel standaardveldopties die je van Odoo kent.


  • translate: Zet je dit op True, dan kan de HTML per taal vertaald worden. Odoo bewaart per actieve taal een aparte versie van de HTML in de database.
  • required: Maakt het veld verplicht. Let op: een Html-veld met enkel lege tags of witruimte kan door de interface nog als niet-leeg gezien worden, dus verplichte validatie werkt het best als het echt leeg is.
  • default: Stelt een standaard HTML-inhoud in voor nieuwe records — handig om bijvoorbeeld e-mailtemplates of productteksten vooraf te vullen.
  • compute: Verbindt een Python-methode die dynamisch HTML genereert. Met store=True wordt het resultaat in de database bewaard.
  • copy: Bepaalt of de HTML gekopieerd wordt bij dupliceren van een record; standaard True.

Weergave in views

In formulierweergaven toont Odoo het veld als rijke teksteditor met een werkbalk. In lijstweergaven zie je meestal een korte, ontdane preview zonder HTML, zodat lijsten overzichtelijk blijven.


Met het widget-attribuut in XML kun je de weergave bijsturen. Standaard is de rich text-editor actief. Voor read-only weergave (bijvoorbeeld in rapporten of portalpagina’s) kun je het html-widget gebruiken om opgemaakte HTML weer te geven zonder bewerkbare toolbar.


Interactie met de ORM

Voor ontwikkelaars levert het lezen van een Html-veld een string met ruwe HTML op; schrijven verwacht eveneens een HTML-string. De sanitizatie gebeurt op ORM-niveau vóórdat de waarde in de database komt, dus ook via XML-RPC doorgestuurde waarden worden schoongemaakt zolang sanitize=True staat.


Praktisch betekent dit dat je, wanneer je eigen tags of attributen wil bewaren die niet op Odoo’s toegestane lijst staan, sanitize=False moet zetten of de sanitize-flags op het veld moet aanpassen — een geavanceerde keuze die je alleen neemt na zorgvuldige veiligheidsafweging.

Praktische bedrijfsgevallen


Het Html-veld komt op veel plekken binnen Odoo terug. Hieronder vijf concrete voorbeelden uit gangbare bedrijfsprocessen.


Voorraad en e‑commerce: productomschrijvingen

Het meest gebruikte Html-veld is vaak description_sale op product.template — de tekst die klanten op de webshop zien en die in verkoopregels verschijnt. Dankzij het Html-veld kunnen merchandisers duidelijke, gestructureerde productomschrijvingen schrijven met opsommingen, kopjes en afbeeldingen, wat doorgaans de conversie ten goede komt. Omdat dezelfde productrecord zowel backoffice als storefront voedt, vermijd je duplicatie van content.


E-mailmarketing: body van templates

E-mailtemplates in Odoo gebruiken Html-velden (bijv. body_html op mail.template) voor de volledige e-mailinhoud: lay-out, afbeeldingen en dynamische placeholders die bij verzending vervangen worden. Marketeers kunnen zo rijke e-mails ontwerpen binnen Odoo zonder externe designtools, en de content hergebruiken in campagnes of offertes.


CRM: notities en opportuniteitsomschrijvingen

Salesmedewerkers hebben vaak nood aan gestructureerde context rond leads en deals. Html-velden op CRM-records laten toe om nette, opgemaakte notities te bewaren met lijsten of links naar documenten — handiger dan platte tekst wanneer zulke notities intern gedeeld of afgedrukt moeten worden.


Accounting: factuurvoorwaarden en clausules

Betalingsvoorwaarden, juridische teksten of garantieclausules onderaan facturen en verkooporders worden vaak in het note-veld bewaard, dat een Html-veld is. Zo blijven regels en nadruk behouden bij het afdrukken naar PDF en ziet het er professioneel uit.


HR: functieomschrijvingen

Bij vacatures in Odoo Recruitment staat de functiebeschrijving in een Html-veld op hr.job en hr.applicant. Dat maakt nette secties mogelijk voor verantwoordelijkheden, vereisten en voordelen — precies wat een sollicitatiepagina professioneel en aantrekkelijk maakt.

Een Html-veld aanmaken of aanpassen


Er zijn drie veelgebruikte manieren om een Html-veld toe te voegen, afhankelijk van jouw technische voorkeur en deploymentstrategie.


Met Odoo Studio (geen code)

Odoo Studio laat je zonder programmeren een Html-veld toevoegen aan een formulier:

  1. Open Odoo Studio vanuit het hoofdmenu.
  2. Navigeer naar het formulier waar je het veld wilt plaatsen.
  3. Sleep in de zijbalk een Html- of Rich Text-veld naar het formulier.
  4. Stel het label en opties in via de eigenschappen.
  5. Sla op en sluit Studio.

Studio maakt het veld automatisch aan met een x_studio_-prefix, voegt het toe aan de view en regelt de databasekolom. Geen migraties of extra deploystappen nodig — het veld is direct beschikbaar in de omgeving.


Met Python in een custom module

Voor ontwikkelaars die modules bouwen, definieer je Html-velden in Python — ideaal wanneer je versiebeheer en gecontroleerde deploys wil toepassen:


from odoo import fields, models

class SaleOrder(models.Model):
    _inherit = 'sale.order'

    x_delivery_instructions = fields.Html(
        string='Delivery Instructions',
        sanitize=True,
        translate=True,
    )

Na het toevoegen van de velddefinitie zet je het veld in de bijhorende view-XML zodat gebruikers het zien. Bij installatie of upgrade maakt Odoo automatisch de TEXT-kolom aan; in formulieren renderen die velden standaard als rich text-editor.


Via de XML-RPC API

Als je Odoo configuraties geautomatiseerd aanmaakt via scripts of deployment pipelines, kun je Html-velden ook via XML-RPC creëren:

field_id = models.execute_kw(
    ODOO_DB, uid, ODOO_API_KEY,
    'ir.model.fields', 'create',
    [{
        'name': 'x_custom_notes',
        'field_description': 'Custom Notes',
        'model_id': model_id,
        'ttype': 'html',
        'state': 'manual',
    }]
)

De ttype: 'html' maakt Odoo duidelijk dat het om een Html-veld gaat. state: 'manual' markeert het als een gebruiker-gegenereerd veld in plaats van modulegedefinieerd. Dit is ook de methode die sommige implementatiepartners gebruiken voor remote configuratie.


Let op dat sommige sanitizatie-opties niet via ir.model.fields API gezet kunnen worden zoals in Python; bij aanmaak via de API gelden de standaard sanitizatie-instellingen.

Aanbevelingen en goede gewoonten


1. Houd sanitizatie aan tenzij je een goede reden hebt

De standaard sanitizatie beschermt tegen XSS-kwetsbaarheden. Voor de meeste toepassingen is die veilig en voldoende. Schakel uit alleen wanneer de inhoud uit een volledig vertrouwde, interne bron komt, nooit voor vrije gebruikersinput of externe bronnen.


2. Zet translate=True voor meertalige content

Ondersteunt je installatie meerdere talen, zorg dat zichtbare Html-velden (webshop, klantdocumenten) translate=True hebben. Zo kun je per taal aparte HTML onderhouden en voorkom je dat klanten teksten in de verkeerde taal zien.


3. Vermijd afhankelijkheid van externe bronnen in de HTML

Externe afbeeldingen of scripts in HTML zorgen voor zwakke schakels: als een externe URL verandert of offline gaat, breekt je weergave. Gebruik liever Odoo-attachements en interne URLs zodat content draagbaar en robuust blijft bij migraties of serverwijzigingen.


4. Gebruik berekende Html-velden voor dynamische inhoud

Voor programmatisch gegenereerde content — bijvoorbeeld een geformatteerd orderoverzicht of dynamische clausules — is een computed Html-veld met store=True handig. De logica staat op één plaats en het resultaat wordt snel opgehaald in interface en PDF-rapporten.


5. Denk na of je écht Html nodig hebt of volstaat met Text

Als de tekst alleen als platte tekst gelezen wordt, volstaat vaak een Text-veld. Gebruik Html alleen waar opmaak relevant is: website, PDF, e-mail. Onnodig een rich-editor aanbieden kan het gebruik ingewikkelder maken voor eenvoudige notities.

Veelvoorkomende valkuilen


Sanitize uitschakelen en het vergeten

Sanitization tijdelijk uitzetten om development-stress te vermijden en daarna vergeten is een bekende fout. Een editable veld zonder sanitizatie is een beveiligingsrisico. Documenteer altijd waarom je sanitizatie hebt uitgezet en plan een veiligheidsreview voorafgaand aan productie.


Kopieerplakken met rommelige HTML

Plakken vanuit Word, Google Docs of webpagina’s levert vaak rommelige of niet-standaard HTML op: extra onzichtbare tekens, gebroken tags of opgeblazen inhoud die de weergave en zoekfunctionaliteit belemmert. Adviseer gebruikers eerst ‘plakken als platte tekst’ en daarna opmaken in de editor.


Html-veld verwarren met websitebouwer-content

De websitebouwer gebruikt componenten en blokken die anders worden opgeslagen dan een standaard Html-veld. Complexe website-HTML direct in een modelveld plakken werkt meestal niet en wordt vaak weggevangen door de sanitizatie of anders gerenderd.


Vergeten van translate bij meertalige implementaties

In een meertalige setup betekent geen translate=True dat alle gebruikers dezelfde HTML te zien krijgen, ook externe contacten. Dit geldt vooral voor productomschrijvingen, e-mails en klantgerichte content. Het achteraf corrigeren kan lastig zijn als er al content voor één taal ingevoerd is.


Html gebruiken waar platte tekst verwacht wordt

Some parts of Odoo, such as email subjects, report titles, or external API responses, expect plain text strings. If you store an Html field value in a context where the HTML tags are not stripped, your users will see raw markup like <p>Hello</p> instead of clean text. Always check how and where the field value will be consumed before choosing Html over Char or Text.

Samenvatting


Het Html-veld is een van de krachtigste veldtypes binnen Odoo: het ondersteunt productteksten, e-mailtemplates, vacatureteksten en factuurnotities, en maakt opgemaakte content mogelijk zonder extra tooling.


Door te begrijpen hoe het veld werkt — vooral de sanitizatie, vertaalondersteuning en het verschil in renderingcontexten — maak je betere keuzes bij het ontwerpen of aanpassen van een Odoo-omgeving. Of je nu Studio gebruikt, een veld in Python definieert of het via de API aanmaakt, dezelfde principes gelden.


Zoals bij veel Odoo-componenten geldt: het veld zelf is eenvoudig zodra je begrijpt wat er onderhuids gebeurt. De echte waarde komt voort uit het doelgericht inzetten ervan, met de juiste instellingen voor het juiste soort content.

Bij Dasolo begeleiden we bedrijven bij het implementeren, aanpassen en optimaliseren van Odoo in alle afdelingen. Of je nu hulp nodig hebt bij een helder datamodel, het toevoegen van velden aan workflows, of het bouwen van maatwerkmodules — wij ondersteunen je graag. Neem contact op en laten we samen jouw Odoo-project bespreken.

HTML Field in Odoo: De Complete Gids
Dasolo 6 maart 2026
Deel deze post
Aanmelden om een reactie achter te laten