Overslaan naar inhoud

HTML Veld in Odoo: De Complete Gids

Alles wat je moet weten over het Html-veld in het Odoo-datamodel, van basisgebruik tot technische aanpassing
6 maart 2026 in
HTML Veld in Odoo: De Complete Gids
Dasolo
| Nog geen reacties

Inleiding


Wanneer je naar een productbeschrijving in een Odoo e-commerce winkel kijkt, wordt de opgemaakte tekst met vetgedrukte koppen, opsommingstekens en afbeeldingen aangedreven door een enkel veldtype: het Html-veld. Het is een van de meest veelzijdige velden in het Odoo-datamodel en het komt op meer plaatsen voor dan de meeste gebruikers zich realiseren.


In tegenstelling tot een gewoon tekstveld dat eenvoudige strings opslaat, slaat het Html-veld rijke inhoud op met volledige opmaak. Dit maakt het essentieel waar gebruikers gestructureerde of gestylede tekst moeten schrijven, of dat nu een productbeschrijving, een e-mailsjabloon, een interne notitie of een websitegedeelte is.


Deze gids behandelt wat het Html-veld is, hoe het werkt in de Odoo ORM en database, waar het wordt gebruikt in echte bedrijfsworkflows, en hoe je het kunt maken of aanpassen met Odoo Studio of Python-code. We behandelen ook de meest voorkomende fouten die mensen maken bij het werken met dit veldtype.

Wat is het Html-veld in Odoo


In de Odoo ORM is het Html-veld ontworpen om opgemaakte HTML-inhoud op te slaan. Het komt overeen met een TEXT-kolom in PostgreSQL, en de opgeslagen waarde is een HTML-string. Odoo verzorgt automatisch de weergave en sanitatie, zodat wat gebruikers in de interface zien een volledig opgemaakte rich text editor is, en geen ruwe HTML-code.


Vanuit het perspectief van de gebruiker verschijnt een Html-veld als een WYSIWYG-editor (What You See Is What You Get). Gebruikers kunnen vet, cursief, koppen, lijsten, links, tabellen toepassen en zelfs afbeeldingen rechtstreeks in het veld invoegen. Het resultaat wordt achter de schermen opgeslagen als gestructureerde HTML.


Hier ziet het veld eruit in een Python-modeldefinitie:

from odoo import fields, models

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

    x_technical_specs = fields.Html(
        string='Technische Specificaties',
        sanitize=True,
        sanitize_tags=True,
    )

De string parameter stelt het zichtbare label in. De sanitize parameter bepaalt of Odoo potentieel gevaarlijke HTML verwijdert voordat de waarde wordt opgeslagen. Dit is belangrijk voor veiligheidsredenen en is standaard ingeschakeld.


In Odoo Studio wordt dit type veld Html of Rich Text genoemd. Wanneer het via Studio wordt aangemaakt, krijgt het een x_studio_ prefix. Wanneer het in Python of via de XML-RPC API wordt gedefinieerd, kies je zelf de technische naam.

Hoe het veld werkt


Wanneer je een Html-veld in Odoo definieert, maakt het framework een TEXT kolom in de PostgreSQL-database aan. Er is geen lengtebeperking op database-niveau, wat het geschikt maakt voor lange inhoud. Het Odoo-framework beheert de sanitatielaag voordat de waarde naar de database wordt geschreven.


Sanitatie en Veiligheid

Het meest kenmerkende gedrag van het Html-veld in vergelijking met andere veldtypes is de sanitatielaag. Standaard verwijdert Odoo alle HTML-tags of -attributen die kunnen worden gebruikt voor cross-site scripting (XSS) aanvallen. Dit wordt gecontroleerd door een set veldattributen:

  • sanitize: Wanneer True (de standaard), past Odoo het volledige sanitatieproces toe voordat de waarde wordt opgeslagen. Stel in op False alleen wanneer je zeker weet dat de inhoud van een vertrouwde bron komt en de ruwe HTML moet behouden.
  • sanitize_tags: Wanneer True, verwijdert Odoo alle HTML-tags die niet op de toegestane lijst staan. Dit uitschakelen staat willekeurige tags toe, maar moet met voorzichtigheid worden gedaan.
  • sanitize_attributes: Bepaalt of attributen op HTML-tags ook worden gesaneerd.
  • sanitize_style: Bepaalt of inline stijl-attributen worden gesaneerd. Standaard zijn bepaalde CSS-eigenschappen toegestaan, terwijl potentieel gevaarlijke eigenschappen worden verwijderd.
  • strip_style: Wanneer True, verwijdert het alle inline stijl-attributen volledig.
  • strip_classes: Wanneer True, verwijdert het alle CSS klasse-attributen uit de opgeslagen inhoud.

Deze sanering maakt het Html-veld veilig voor gebruik met door gebruikers gegenereerde inhoud, wat de reden is waarom het voorkomt in klantgerichte formulieren en e-mailsjablonen doorheen Odoo.


Belangrijke Veldattributen

Naast sanering deelt het Html-veld veel van de standaard Odoo veldattributen:


  • translate: Wanneer ingesteld op True, kan de inhoud van het veld per taal worden vertaald. Odoo slaat een aparte versie van de HTML op voor elke actieve taal in de database.
  • required: Maakt het veld verplicht. Let op dat een Html-veld dat alleen witruimte of lege tags bevat, nog steeds als niet-leeg verschijnt in de interface, dus de vereiste validatie werkt het beste op echt lege waarden.
  • default: Stelt een standaard HTML-waarde in voor nieuwe records. Handig voor het vooraf invullen van e-mailsjablonen of productbeschrijvingen met standaard boilerplate.
  • compute: Koppelt een Python-methode die de HTML-inhoud dynamisch opbouwt. Met store=True wordt het resultaat in de database opgeslagen.
  • copy: Beheert of de HTML-inhoud wordt gedupliceerd bij het kopiëren van een record. Standaard ingesteld op True.

Hoe het Er Uitziet in Weergaven

In formulierweergaven wordt een Html-veld weergegeven als de Odoo rich text editor. Gebruikers krijgen een werkbalk met opmaakopties en het inhoudsgebied verwerkt gestileerde tekst, afbeeldingen en links. In lijstweergaven toont Odoo doorgaans een platte tekstpreview met HTML-tags verwijderd, om de lijst leesbaar te houden.


Het widgetattribuut in XML-weergaven stelt je in staat om de weergave te controleren. De standaardwidget voor Html-velden is de rich text editor. Je kunt een Html-veld ook weergeven als alleen-lezen HTML-uitvoer met behulp van de html widget, wat nuttig is in rapportweergaven of op portaalpagina's waar je opgemaakte inhoud wilt weergeven zonder een bewerkbare werkbalk.


Interactie met de Odoo ORM

Vanuit een ontwikkelingsperspectief retourneert het lezen van een Html-veld een string die de ruwe HTML-markup bevat. Schrijven naar dit veld verwacht ook een HTML-string. De sanitatie vindt plaats op het niveau van de ORM voordat de schrijfopdracht de database bereikt, dus zelfs waarden die via de XML-RPC API zijn geschreven, ondergaan hetzelfde schoonmaakproces wanneer sanitize=True.


Een praktische implicatie: als je inhoud moet opslaan en ophalen die aangepaste HTML-tags of -attributen bevat die niet op de toegestane lijst van Odoo staan, moet je sanitize=False instellen of de sanitatievlaggen op de velddefinitie aanpassen. Dit is een geavanceerd gebruiksgeval dat zorgvuldige overweging van de beveiligingsimplicaties in jouw implementatie vereist.

Zakelijke gebruikscases


Het Html-veld verschijnt in veel gebieden van een Odoo-implementatie. Hier zijn vijf voorbeelden uit de praktijk van veelvoorkomende bedrijfsworkflows.


Voorraad en E-commerce: Productbeschrijvingen

Het meest gebruikte Html-veld in Odoo is het description_sale veld op product.template. Dit is de productbeschrijving die klanten zien op de website en in verkooporderregels. Het gebruik van een Html-veld hier stelt merchandisingteams in staat om gestructureerde productinhoud te schrijven met opsommingstekens, koppen en ingesloten afbeeldingen, wat allemaal direct leidt tot betere e-commerceconversies. Hetzelfde productrecord voedt zowel de backoffice als de winkel, zodat er geen duplicatie van inhoud tussen systemen is.


E-mailmarketing: Sjabloonlichamen

De e-mailsjablonen van Odoo zijn sterk afhankelijk van Html-velden. Het body_html veld op mail.template slaat de gehele e-mailinhoud op als HTML, inclusief lay-out, afbeeldingen en dynamische plaatsaanduiders die op het moment van verzenden worden vervangen door echte waarden. Marketingteams kunnen rijke e-mailinhoud rechtstreeks in Odoo ontwerpen zonder een externe e-mailontwerptool nodig te hebben. De inhoud is geversioneerd en herbruikbaar in campagnes, offertes en geautomatiseerde workflows.


CRM: Notities en Beschrijvingen van Kansen

Verkoopteams moeten vaak gedetailleerde context over een prospect of deal vastleggen. Html-velden op CRM-leads en kansen stellen vertegenwoordigers in staat om gestructureerde notities te schrijven met opmaak, lijsten en ingesloten links naar externe documenten of voorstellen. Dit is nuttiger dan platte tekstvelden wanneer notities moeten worden gedeeld binnen een team of moeten worden opgenomen in gedrukte rapporten, aangezien de opmaak in al deze contexten behouden blijft.


Boekhouding: Factuurvoorwaarden en -bepalingen

Veel bedrijven voegen betalingsvoorwaarden, juridische clausules of garantie-informatie toe aan de onderkant van facturen en verkooporders. Het note veld op verkooporders en facturen is een Html-veld, waardoor financiële en operationele teams deze voorwaarden met de juiste structuur kunnen opmaken. De inhoud verschijnt netjes op afgedrukte PDF-documenten, met regeleinden en nadruk die precies zo behouden blijven als ingevoerd.


HR: Functieomschrijvingen

Wanneer HR-teams vacatures plaatsen via Odoo Recruitment, wordt de functieomschrijving opgeslagen in een Html-veld op de hr.job en hr.applicant modellen. Dit maakt gestructureerde vacatureplaatsingen mogelijk met duidelijke secties voor verantwoordelijkheden, vereisten en voordelen, precies het soort opgemaakte inhoud dat professioneel uitziet op een carrièrepagina en helpt de juiste kandidaten aan te trekken.

Een Html-veld maken of aanpassen


Er zijn drie hoofdmanieren om een Html-veld toe te voegen aan een Odoo-model, afhankelijk van je technische setup en implementatieaanpak.


Gebruik Odoo Studio (Geen Code)

Odoo Studio maakt het eenvoudig om een Html-veld toe te voegen aan elk bestaand formulier zonder code te schrijven:

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

Studio maakt automatisch het veld aan met een x_studio_ prefix, voegt het toe aan de weergave en beheert de databasekolom. Er is geen migratie- of implementatiestap aan jouw kant nodig. Het veld is onmiddellijk beschikbaar voor gegevensinvoer in de hele instantie.


Python gebruiken in een aangepaste module

Voor ontwikkelaars die Odoo-modules bouwen, worden Html-velden gedefinieerd in Python-modelbestanden. Deze aanpak wordt aanbevolen voor elke aanpassing die versiebeheer nodig heeft en moet worden uitgerold over staging- en productieomgevingen:


from odoo import fields, models

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

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

Nadat je het veld in het model hebt gedefinieerd, voeg je het toe aan het relevante view XML-bestand zodat het in de interface verschijnt. Odoo beheert de TEXT-kolomcreatie in de database automatisch wanneer je de module installeert of bijwerkt. Het veld wordt weergegeven als een rich text-editor in de formulierweergave zonder extra widgetconfiguratie.


De XML-RPC API gebruiken

Als je Odoo-aanpassingen programmatisch beheert als onderdeel van een implementatiepipeline of een extern configuratiescript, kun je Html-velden maken via de XML-RPC API:

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

De ttype: html waarde vertelt Odoo om een Html-veld te maken. De state: manual instelling markeert het als een door de gebruiker gemaakt veld in plaats van een veld dat door een module is gedefinieerd. Dit is dezelfde aanpak die Dasolo gebruikt voor het maken van velden op afstand in clientomgevingen, als onderdeel van geautomatiseerde configuratienotebooks die kunnen worden uitgevoerd en gevolgd zonder directe servertoegang.


Houd er rekening mee dat saneringsopties (sanitize, sanitize_tags, enz.) niet via de API op ir.model.fields kunnen worden ingesteld op dezelfde manier als in Python. Het standaard saneringsgedrag is van toepassing bij het maken van velden via de API.

Beste praktijken


1. Houd sanitization ingeschakeld, tenzij je een sterke reden hebt om dat niet te doen

Het standaard saneringsgedrag bestaat om je Odoo-instantie te beschermen tegen cross-site scripting-kwulnerabiliteiten. De meeste gebruikssituaties werken perfect met sanering ingeschakeld. Schakel het alleen uit wanneer je inhoud opslaat die is gegenereerd door een volledig vertrouwd intern proces, zoals een server-side rendering-pipeline, en nooit wanneer de inhoud afkomstig is van gebruikersinvoer of externe bronnen.


2. Gebruik translate=True voor meertalige productinhoud

Als uw Odoo-instantie meerdere talen ondersteunt, moeten Html-velden die op de website of op klantgerichte documenten worden weergegeven translate=True hebben. Dit stelt uw team in staat om aparte HTML-inhoud voor elke taal te onderhouden, zodat klanten altijd beschrijvingen en termen in hun eigen taal zien in plaats van een fallback.


3. Vermijd het opslaan van Html-veldinhoud die afhankelijk is van externe bronnen

Het insluiten van externe afbeeldingen of scripts in een Html-veld creëert afhankelijkheden die stilletjes kunnen breken wanneer die externe URL's veranderen of offline gaan. Gebruik het bijvoegselsysteem van Odoo om afbeeldingen intern te hosten en verwijs ernaar met relatieve URL's. Dit houdt uw inhoud draagbaar en veerkrachtig tijdens database-migraties en serverwijzigingen.


4. Gebruik berekende Html-velden voor dynamische documentinhoud

Voor inhoud die programmatisch moet worden opgebouwd, zoals een opgemaakte samenvatting van orderregels of een dynamische garantieclausule, is een berekend Html-veld met store=True een nette oplossing. De berekeningslogica bevindt zich op één plek, de output wordt in de database opgeslagen voor snelle toegang, en het veld wordt correct weergegeven in zowel de interface als in PDF-rapporten.


5. Houd rekening met de rendercontext bij het kiezen van Html versus Text

Als de inhoud alleen in de Odoo-backend zal verschijnen in een context waarin gebruikers het als platte tekst lezen, kan een Text-veld voldoende zijn. Gebruik Html wanneer de opmaak daadwerkelijk belangrijk is voor de lezer, zoals op een webpagina, een afgedrukt document of een e-mail. Het toevoegen van een Html-veld waar een eenvoudig Text-veld zou volstaan, introduceert onnodige complexiteit voor gebruikers die met een rich text-editor moeten omgaan voor eenvoudige notities.

Veelvoorkomende valkuilen


Sanitization uitschakelen en het vergeten

Het instellen van sanitize=False op een veld dat gebruikers direct kunnen bewerken, is een beveiligingsrisico. Het is gemakkelijk om dit tijdens de ontwikkeling te doen om een opmaakvereiste te ontgrendelen, en vervolgens te vergeten het opnieuw te bekijken voordat het in productie gaat. Documenteer altijd waarom sanitization is uitgeschakeld en plan een beoordeling voor de implementatie.


Inhoud plakken van externe bronnen met gebroken HTML

Wanneer gebruikers inhoud van Word-documenten, Google Docs of websites in een Html-veld plakken, bevat het resultaat vaak rommelige of niet-standaard HTML. Dit kan leiden tot inconsistente weergave, onzichtbare tekens die zoekopdrachten verstoren, of opgeblazen veldwaarden die de laadtijden van pagina's vertragen. Moedig gebruikers aan om eerst de optie "Plakken als platte tekst" te gebruiken en vervolgens de opmaak opnieuw toe te passen in de Odoo-editor.


Html-veld verwarren met de inhoud van de websitebouwer

De websitebouwer van Odoo gebruikt bouwblokken en Owl-componenten om pagina-inhoud te construeren. De HTML die door de websitebouwer in paginaweergaven wordt opgeslagen, is niet hetzelfde als wat je in een standaard Html-veld zou invoeren. Proberen om complexe HTML van de websitebouwer in een Html-veld op een model te kopiëren, zal meestal niet correct worden weergegeven en kan door de sanitizer worden verwijderd.


Vergeten te vertalen bij meertalige implementaties

In een meertalige Odoo-instantie toont een Html-veld zonder translate=True dezelfde inhoud aan gebruikers van alle talen. Dit is prima voor interne velden, maar wordt een probleem voor productbeschrijvingen, e-mailtemplates en elke inhoud die externe contacten bereikt. Het missen van deze instelling is gemakkelijk over het hoofd te zien tijdens de initiële setup en moeilijk achteraf te corrigeren zodra de inhoud in slechts één taal is ingevoerd.


Html-velden gebruiken op plaatsen waar platte tekst wordt verwacht

Sommige delen van Odoo, zoals e-mailonderwerpen, rapporttitels of externe API-responses, verwachten platte tekststrings. Als je een Html-veldwaarde opslaat in een context waar de HTML-tags niet worden verwijderd, zullen je gebruikers ruwe opmaak zien zoals <p>Hallo</p> in plaats van schone tekst. Controleer altijd hoe en waar de veldwaarde zal worden gebruikt voordat je voor Html kiest boven Char of Text.

Conclusie


Het Html-veld is een van de krachtigste veldtypes in het Odoo-datamodel. Het zit stilletjes achter productbeschrijvingen, e-mailtemplates, vacatures en factuurnotities, waardoor opgemaakte inhoud mogelijk is door het hele systeem zonder extra tooling.


Begrijpen hoe het werkt, met name de sanitatielaag, de vertalingsondersteuning en hoe het zich gedraagt in verschillende rendercontexten, helpt je betere beslissingen te nemen bij het ontwerpen of aanpassen van een Odoo-instantie. Of je nu Odoo Studio gebruikt om een rich text-veld aan een formulier toe te voegen, het in Python definieert als onderdeel van een aangepaste module, of het op afstand via de API maakt, de principes die in deze gids worden behandeld, zijn van toepassing op alle drie de benaderingen.


Zoals de meeste dingen in Odoo, is het veld zelf eenvoudig zodra je weet wat het onder de motorkap doet. De waarde komt voort uit het gebruik ervan op de juiste plaatsen, met de juiste instellingen, voor het juiste type inhoud.

Bij Dasolo helpen we bedrijven met de implementatie, aanpassing en optimalisatie van Odoo in alle afdelingen. Of je nu hulp nodig hebt bij het ontwerpen van een schoon datamodel, het toevoegen van aangepaste velden aan je workflows, of het bouwen van complete Odoo-modules op maat van jouw bedrijf, ons team staat voor je klaar. Neem contact met ons op en laten we praten over jouw Odoo-project.

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