htmforge
htmforge
htmforge — Typsichere, composable UI-Komponenten für Python.
Server-side rendered, framework-agnostisch, HTMX-first.
Quickstart::
from htmforge import Component
from htmforge.elements import div, p
class Card(Component):
title: str
body: str
def render(self):
return div(p(self.title), p(self.body), cls="card")
print(Card(title="Hello", body="World").to_html())
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
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_html()
Delegiert das HTML-Rendering an :meth:render.
Returns:
| Type | Description |
|---|---|
str
|
Den vollständigen HTML-String der Komponente. |
Element(tag, *children, **attrs)
Repräsentiert einen einzelnen HTML-Tag mit Kindern und Attributen.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
tag
|
str
|
Der HTML-Tag-Name (z.B. |
required |
*children
|
Child
|
Beliebig viele Kind-Elemente ( |
()
|
**attrs
|
object
|
HTML-Attribute als Keyword-Argumente. |
{}
|
Attribute-Konventionen
clswird zuclassim HTML.for_wird zuforim HTML.- Unterstriche innerhalb von Attribut-Namen werden zu Bindestrichen
konvertiert (
hx_get→hx-get,data_id→data-id). - Boolesche Attribute (
True) werden als eigenständige Flags gerendert (disabled,checked...). - Attribute mit Wert
FalseoderNonewerden weggelassen.
Example
el = Element("div", Element("span", "Hallo"), cls="container") el.to_html() '
Hallo'
Initialisiert ein Element mit Tag-Name, Kindern und Attributen.
Source code in htmforge\core\element.py
__repr__()
__str__()
to_html()
Rendert das Element rekursiv zu einem sicheren HTML-String.
Alle Text-Inhalte werden durch markupsafe.escape gesichert, damit
kein unbeabsichtigtes HTML injiziert werden kann.
Returns:
| Type | Description |
|---|---|
str
|
Ein vollständiger, wohlgeformter HTML-String. |