Home

Awesome

Starlette_htmx

A set of extensions for using HTMX with Starlette.

Based on django-htmx by Adam Johnson

Middleware

Usage:

from starlette.middleware import Middleware
from starlette_htmx.middleware import HtmxMiddleware

app = Starlette(debug=True, ..., middleware=[Middleware(HtmxMiddleware)])

The request objects will then have a request.state.htmx object which you can use to test whether the request was made by htmx.

This class provides shortcuts for reading the htmx-specific request headers <https://htmx.org/reference/#request_headers>__.

__bool__(): bool

True if the request was made with htmx, otherwise False. This is based on the presence of the HX-Request header.

This allows you to switch behaviour for requests made with htmx like so:


    def my_view(request):
        if request.htmx:
            template_name = "partial.html"
        else:
            template_name = "complete.html"
        return render(template_name, ...)

boosted: bool

True if the request came from an element with the hx-boost attribute. Based on the HX-Boosted header.

current_url: str | None

The current URL of the browser, or None for non-htmx requests. Based on the HX-Current-URL header.

history_restore_request: bool

True if the request is for history restoration after a miss in the local history cache. Based on the HX-History-Restore-Request header.

prompt: str | None

The user response to hx-prompt <https://htmx.org/attributes/hx-prompt/>__ if it was used, or None.

target: str | None

The id of the target element if it exists, or None. Based on the HX-Target header.

trigger: str | None

The id of the triggered element if it exists, or None. Based on the HX-Trigger header.

trigger_name: str | None

The name of the triggered element if it exists, or None. Based on the HX-Trigger-Name header.

triggering_event: Any | None

The deserialized JSON representtation of the event that triggered the request if it exists, or None. This header is set by the event-header htmx extension <https://htmx.org/extensions/event-header/>__, and contains details of the DOM event that triggered the request.