htmforge.core.component
htmforge.core.component.Component(**data)
Bases: BaseModel, ABC
Abstrakte Basisklasse für wiederverwendbare UI-Komponenten.
Subklassen deklarieren typisierte Props als Pydantic-Felder und
implementieren die :meth:render-Methode, die ein
:class:~htmforge.core.element.Element zurückgibt.
Die Klasse aktiviert Pydantic-Features
validate_assignment = True: Props werden auch nach der Initialisierung validiert.arbitrary_types_allowed = True: Erlaubt Non-Pydantic-Typen wie DOM-Elemente als Felder.frozen = False: Komponenten sind per Default mutable.
Example
from htmforge.elements import div, p
class Card(Component): ... title: str ... body: str ... ... def render(self) -> Element: ... return div(p(self.title), p(self.body), cls="card") ... Card(title="Hallo", body="Welt").to_html() '
'Hallo
Welt
Initialisiert die Komponente und blockiert Klassen ohne render.
Source code in htmforge/core/component.py
__init_subclass__(**kwargs)
Validiert, dass Unterklassen eine konkrete render-Methode haben.
Source code in htmforge/core/component.py
__repr__()
Gibt eine lesbare Debug-Darstellung der Komponente zurueck.
Example
Card(title="Hi", body="World") Card(title='Hi', body='World')
Source code in htmforge/core/component.py
clone(**overrides)
Gibt eine neue Instanz mit geaenderten Props zurueck.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
**overrides
|
Any
|
Felder die ueberschrieben werden sollen. |
{}
|
Returns:
| Type | Description |
|---|---|
Component
|
Eine neue Instanz desselben Typs mit den geaenderten Werten. |
Example
card = GreetingCard(title="Hi", body="World") card2 = card.clone(title="Hello") card2.title 'Hello' card2.body 'World'
Source code in htmforge/core/component.py
fast_construct(**data)
classmethod
Erstellt eine Instanz ohne Pydantic-Validierung (Opt-in Fast-Path, #1).
Nutzt intern BaseModel.model_construct(), um den vollen
Validierungszyklus zu ueberspringen — sinnvoll, wenn dieselbe
Component-Struktur sehr oft mit bereits bekanntermassen gueltigen
Daten instanziiert wird (z.B. in engen Rendering-Loops ueber
Datenbank-Zeilen, die schon einmal validiert wurden).
Warning
Die Daten werden NICHT validiert oder typ-konvertiert. Falsche Typen oder fehlende Pflichtfelder fuehren nicht hier, sondern erst (oder ueberhaupt nicht) beim Rendern zu einem Fehler. Nur verwenden, wenn die Gueltigkeit der Daten bereits anderweitig sichergestellt ist.
Note
Ob dieser Pfad tatsaechlich schneller ist, ist NICHT pauschal
garantiert und schwankt spuerbar zwischen Umgebungen: Pydantic
v2 validiert bereits ueber den kompilierten Rust-Core, waehrend
model_construct() reiner Python-Code ist — je nach
Pydantic-/Python-Version, Plattform und Struktur der Component
kann der eine oder der andere Pfad gewinnen (in eigenen Tests
waehrend der Entwicklung war das Bild zwischen Windows- und
Linux-Umgebungen fuer dieselbe Component uneinheitlich). Diese
Methode ist daher explizit ein Opt-in-Werkzeug, keine
garantierte Optimierung — vor dem Einsatz in einem Hot-Loop
immer die konkrete Component in der Zielumgebung benchmarken,
statt dieser Note pauschal zu vertrauen.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
**data
|
Any
|
Feldwerte, unvalidiert uebernommen. Fehlende Felder erhalten ihren deklarierten Default, soweit vorhanden. |
{}
|
Returns:
| Type | Description |
|---|---|
Component
|
Eine neue Instanz, ohne dass Pydantic-Validierung durchlaufen |
Component
|
wurde. |
Example
card = GreetingCard.fast_construct(title="Hi") card.title 'Hi'
Source code in htmforge/core/component.py
htmx_attrs()
Gibt alle gesetzten HTMX-Props als Attribut-Dict zurueck.
Returns:
| Type | Description |
|---|---|
dict[str, object]
|
Ein Dict mit nur den HTMX-Attributen, die nicht |
Example
button("Save", **self.htmx_attrs())
Source code in htmforge/core/component.py
render()
abstractmethod
Rendert die Komponente zu einem :class:~htmforge.core.element.Element.
Subklassen müssen diese Methode implementieren und das Root-Element der Komponente zurückgeben.
Returns:
| Type | Description |
|---|---|
Element
|
Das Root-:class: |
Source code in htmforge/core/component.py
to_django()
Gibt eine Django-kompatible HttpResponse zurück.
Note
Erfordert django als optionale Dependency.
Returns:
| Type | Description |
|---|---|
Any
|
Eine |
Raises:
| Type | Description |
|---|---|
ImportError
|
Wenn |
Source code in htmforge/core/component.py
to_fastapi()
Gibt eine FastAPI-kompatible HTMLResponse zurück.
Note
Erfordert fastapi als optionale Dependency.
Returns:
| Type | Description |
|---|---|
Any
|
Eine |
Raises:
| Type | Description |
|---|---|
ImportError
|
Wenn |
Source code in htmforge/core/component.py
to_flask()
Gibt eine Flask-kompatible Response zurück.
Note
Erfordert flask als optionale Dependency.
Returns:
| Type | Description |
|---|---|
Any
|
Eine |
Raises:
| Type | Description |
|---|---|
ImportError
|
Wenn |
Source code in htmforge/core/component.py
to_fragment()
Rendert die Komponente als HTMX-Fragment (identisch mit to_html()).
Explizite Methode fuer Fragmente um die Absicht zu dokumentieren: dieser Endpunkt liefert kein vollstaendiges Dokument, sondern nur einen HTML-Ausschnitt fuer HTMX-Swaps.
Returns:
| Type | Description |
|---|---|
str
|
Den HTML-String der Komponente ohne DOCTYPE. |
Example
Alert(message="OK").to_fragment() '
OK'
Source code in htmforge/core/component.py
to_html()
Delegiert das HTML-Rendering an :meth:render.
Returns:
| Type | Description |
|---|---|
str
|
Den vollständigen HTML-String der Komponente. |
to_json()
Return a JSON-serializable dict with HTML and component metadata.
This is useful for API endpoints that need to return a rendered HTML fragment alongside minimal metadata about the component instance.
Returns:
| Type | Description |
|---|---|
dict[str, str]
|
A mapping containing the rendered HTML under |
dict[str, str]
|
component class name under |
Example
Hi