Dynamische visualisatie
Gebruik deze widget wanneer het uiteindelijke widgettype of de inhoud pas tijdens runtime bepaald kan worden.
Widget reference
De Element widget is de meest flexibele dashboardwidget in Dashview. Zij voert een gepubliceerd Element uit en kan een renderbare widgetconfig, interactieve UI of beide teruggeven. Daarmee kun je dynamische widgets bouwen die standaard widgettypes combineren met Python-logica en eigen knoppen of formulieren.
Maak hier een screenshot van het hoofdscherm voor Element widget: Python-logica direct op je dashboard overzicht, met de belangrijkste controls en een representatieve zichtbare state.
Gebruik deze widget wanneer het uiteindelijke widgettype of de inhoud pas tijdens runtime bepaald kan worden.
Geschikt voor complexe berekeningen, custom renderinglogica of output die niet netjes in een gewone chart of tabel past.
Wanneer hetzelfde Element ook in een automation of datasource-transform terugkomt, houd je logica gecentraliseerd.
Gebruik geen Element widget voor simpele KPI’s, tabellen of charts die met standaardopties al onderhoudbaar zijn.
| Optie | Verplicht | Beschrijving |
|---|---|---|
elementId | Ja | Het Element dat de widget aanstuurt. Zonder deze waarde kan de widget niet draaien. |
elementVersion | Nee | Laat leeg voor de laatste gepubliceerde versie of pin bewust een specifieke release. |
entrypoint | Nee | Override op de standaard entrypoint als je Element meerdere uitvoerpaden heeft. |
timeoutSeconds | Nee | Beschermt het dashboard tegen te lange runs; houd dit laag genoeg voor een prettige UX. |
runnerTier | Nee | Kies tiny voor lichte runs (512Mi), of alleen een grotere tier als het Element meer geheugen of CPU nodig heeft. |
tableName | Nee | Naam voor inline row-output wanneer het Element naast de widgetconfig ook rijen terugstuurt. |
Een Element widget kan de actieve dashboardcontext meekrijgen. Dat maakt haar krachtig, maar ook gevoelig voor verkeerde aannames. Test daarom altijd met echte paginafilters.
filters-sleutel of eigen param key zodat collega’s meteen begrijpen wat er wordt doorgegeven.{
"from": "2026-03-01",
"to": "2026-03-31",
"segment": "enterprise",
"showWarnings": true
}
Bij elke Element widget-run voegt Dashview runtime metadata toe aan params.__dashview.
Gebruik dit om HTML of CSS passend te maken voor lightmode en darkmode.
{
"__dashview": {
"theme": {
"mode": "dark",
"isDark": true,
"isLight": false
},
"widget": {
"id": "widget_dynamic_html",
"type": "element"
}
}
}
def run(context, params):
theme = (params.get("__dashview") or {}).get("theme") or {}
dark = theme.get("mode") == "dark"
bg = "#111827" if dark else "#ffffff"
fg = "#f9fafb" if dark else "#111827"
return {
"widget": {
"id": "theme_aware_html",
"type": "html",
"options": {
"content": f"<div style='background:{bg};color:{fg}'>Theme aware</div>",
"sanitizeHtml": True
}
}
}
result.widget.result.ui, bijvoorbeeld met tekst, knoppen of formulieren.result.widget en result.ui tegelijk teruggeven. De interactieve UI staat standaard onder de widget; gebruik placement: "before" om haar erboven te tonen.
Met result.ui kan een Element widget kleine interactieve applicaties renderen zonder aparte
frontendcode. Ondersteunde nodes zijn container, row, text,
html, button, form, divider en spacer.
Formuliervelden ondersteunen text, textarea, number,
select, checkbox en hidden.
def run(context, params):
dashview = params.get("__dashview") or {}
interaction = dashview.get("interaction")
state = dashview.get("state") or {"count": 0}
if interaction and interaction.get("id") == "increment":
state["count"] = int(state.get("count") or 0) + 1
return {
"widget": {
"type": "html",
"options": {"content": "<p>De normale widget-output blijft werken.</p>"}
},
"state": state,
"ui": {
"type": "container",
"placement": "after",
"children": [
{"type": "text", "variant": "title", "text": f"Teller: {state['count']}"},
{"type": "button", "id": "increment", "label": "Verhoog", "severity": "success"},
{
"type": "form",
"id": "feedback",
"label": "Feedback",
"fields": [
{"id": "message", "label": "Bericht", "type": "textarea", "required": True},
{"id": "urgent", "label": "Urgent", "type": "checkbox"}
],
"submitLabel": "Verstuur"
}
]
}
}
Een klik of formulier-submit voert hetzelfde Element opnieuw uit. Dashview stuurt de actie mee als
params.__dashview.interaction en de vorige state als params.__dashview.state.
HTML-nodes worden door de frontend gesaneerd en zijn bedoeld voor markup; JavaScript en inline event handlers
worden niet uitgevoerd.
| Probleem | Wat meestal helpt |
|---|---|
| Widget slaat niet op | Controleer of elementId gevuld is en extra params geldig JSON-object zijn. |
| Runtimefout bij openen dashboard | Controleer publish-status, runtime vars/secrets en of het Element nog een geldige widgetconfig retourneert. |
| Output verandert onverwacht | Pin een specifieke elementVersion in plaats van altijd de nieuwste release te gebruiken. |
| Filters lijken niet mee te gaan | Controleer filterdoorgifte, filterbron en de sleutel waaronder filters in params belanden. |