Skip to content

htmforge.core.element

htmforge.core.element.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. "div", "span").

required
*children Child

Beliebig viele Kind-Elemente (Element, str oder None). None-Werte werden stillschweigend ignoriert.

()
**attrs object

HTML-Attribute als Keyword-Argumente.

{}
Attribute-Konventionen
  • cls wird zu class im HTML.
  • for_ wird zu for im HTML.
  • Unterstriche innerhalb von Attribut-Namen werden zu Bindestrichen konvertiert (hx_gethx-get, data_iddata-id).
  • Boolesche Attribute (True) werden als eigenständige Flags gerendert (disabled, checked ...).
  • Attribute mit Wert False oder None werden 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
def __init__(self, tag: str, *children: Child, **attrs: object) -> None:
    """Initialisiert ein Element mit Tag-Name, Kindern und Attributen."""
    self._tag: str = tag.lower()
    self._children: tuple[Child, ...] = children
    self._attrs: dict[str, object] = attrs

__eq__(other)

Vergleicht zwei Elemente anhand ihres gerenderten HTML.

Example

div("a") == div("a") True div("a") == div("b") False

Source code in htmforge/core/element.py
def __eq__(self, other: object) -> bool:
    """Vergleicht zwei Elemente anhand ihres gerenderten HTML.

    Example:
        >>> div("a") == div("a")
        True
        >>> div("a") == div("b")
        False
    """
    if not isinstance(other, Element):
        return NotImplemented
    return self.to_html() == other.to_html()

__hash__()

Hash basierend auf dem gerenderten HTML.

Source code in htmforge/core/element.py
def __hash__(self) -> int:
    """Hash basierend auf dem gerenderten HTML."""
    return hash(self.to_html())

__repr__()

Gibt eine kurze Debug-Darstellung zurück.

Source code in htmforge/core/element.py
def __repr__(self) -> str:
    """Gibt eine kurze Debug-Darstellung zurück."""
    return f"Element(tag={self._tag!r}, attrs={self._attrs!r})"

__str__()

Delegiert zu :meth:to_html.

Source code in htmforge/core/element.py
def __str__(self) -> str:
    """Delegiert zu :meth:`to_html`."""
    return self.to_html()

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.

Source code in htmforge/core/element.py
def to_html(self) -> str:
    """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:
        Ein vollständiger, wohlgeformter HTML-String.
    """
    attrs_str = self._render_attrs()
    tag = self._tag

    if tag in _VOID_ELEMENTS:
        return f"<{tag}{attrs_str}>"

    inner = self._render_children()
    return f"<{tag}{attrs_str}>{inner}</{tag}>"

htmforge.core.element.safe_html(text)

Markiert einen String als sicheres HTML — verhindert doppeltes Escaping.

Nützlich wenn der Text bereits valides HTML enthält (z.B. aus einer Datenbank) und nicht erneut escaped werden soll.

Parameters:

Name Type Description Default
text str

Ein String der bereits HTML enthält.

required

Returns:

Name Type Description
Ein Markup

class:markupsafe.Markup-Objekt, das beim Rendern

Markup

nicht nochmals escaped wird.

Example

from htmforge.elements import div from htmforge.core.element import safe_html div(safe_html("fett")).to_html() '

fett
'

Source code in htmforge/core/element.py
def safe_html(text: str) -> Markup:
    """Markiert einen String als sicheres HTML — verhindert doppeltes Escaping.

    Nützlich wenn der Text bereits valides HTML enthält (z.B. aus einer
    Datenbank) und nicht erneut escaped werden soll.

    Args:
        text: Ein String der bereits HTML enthält.

    Returns:
        Ein :class:`markupsafe.Markup`-Objekt, das beim Rendern
        nicht nochmals escaped wird.

    Example:
        >>> from htmforge.elements import div
        >>> from htmforge.core.element import safe_html
        >>> div(safe_html("<strong>fett</strong>")).to_html()
        '<div><strong>fett</strong></div>'
    """
    return Markup(text)  # noqa: S704