Skip to content

Markdown

Render markdown content into safe HTML with optional sanitization.

Installation

pip install "faststrap[markdown]"

Usage

from faststrap import Markdown

Markdown(
    "# Hello\n\nThis is **safe** markdown.",
    cls="prose",
)

Behavior

  • Uses Python markdown for conversion.
  • Sanitizes output with bleach by default.
  • Raises a clear ImportError if optional dependencies are missing.

Advanced Control

Markdown(
    text,
    sanitize=True,
    extensions=["extra", "tables", "fenced_code"],
)

Security Notes

If you disable sanitization, only render trusted content.

API Reference

faststrap.components.display.markdown.Markdown(text, *, sanitize=True, extensions=None, allowed_tags=None, allowed_attributes=None, allowed_protocols=None, **kwargs)

Render markdown into a styled container.

This component is optional and requires extra dependencies: pip install faststrap[markdown]

Source code in src/faststrap/components/display/markdown.py
@register(category="display")
def Markdown(
    text: str,
    *,
    sanitize: bool = True,
    extensions: list[str] | None = None,
    allowed_tags: list[str] | None = None,
    allowed_attributes: dict[str, list[str]] | None = None,
    allowed_protocols: list[str] | None = None,
    **kwargs: Any,
) -> Div:
    """Render markdown into a styled container.

    This component is optional and requires extra dependencies:
    `pip install faststrap[markdown]`
    """
    html = render_markdown(
        text,
        sanitize=sanitize,
        extensions=extensions,
        allowed_tags=allowed_tags,
        allowed_attributes=allowed_attributes,
        allowed_protocols=allowed_protocols,
    )

    user_cls = kwargs.pop("cls", "")
    attrs: dict[str, Any] = {
        "cls": merge_classes("faststrap-markdown", user_cls),
    }
    attrs.update(convert_attrs(kwargs))
    return Div(NotStr(html), **attrs)