HTMX Utilities

Utilities for handling HTMX requests and responses

Request Detection


source

is_htmx_request

 is_htmx_request (request)

Check if a request is an HTMX request.

Type Details
request FastHTML request object
Returns bool True if request is from HTMX

HTMX requests include the ‘HX-Request’ header set to ‘true’. This is useful for conditionally returning partial HTML vs full pages.

# Example: Check if request is from HTMX
from types import SimpleNamespace

# Mock HTMX request
htmx_request = SimpleNamespace(headers={'HX-Request': 'true'})
print(f"Is HTMX request: {is_htmx_request(htmx_request)}")

# Mock normal request
normal_request = SimpleNamespace(headers={})
print(f"Is HTMX request: {is_htmx_request(normal_request)}")
Is HTMX request: True
Is HTMX request: False

HTMX Request Handler


source

handle_htmx_request

 handle_htmx_request (request, content_fn:Callable, *args,
                      wrap_fn:Optional[Callable]=None, **kwargs)

Handle HTMX vs full page response pattern.

Type Default Details
request FastHTML request object
content_fn Callable Function to generate content
args VAR_POSITIONAL Positional arguments for content_fn
wrap_fn Optional None Optional wrapper function for full page requests
kwargs VAR_KEYWORD

This is a common pattern where HTMX requests return just the content, while full page requests wrap the content with page layout.

# Example: Using handle_htmx_request
from types import SimpleNamespace
from fasthtml.common import Div, H1

def my_content():
    return Div(H1("Dashboard Content"))

def my_wrapper(content):
    return Div(
        H1("Site Header"),
        content,
        Div("Footer")
    )

# HTMX request - returns just content
htmx_request = SimpleNamespace(headers={'HX-Request': 'true'})
result = handle_htmx_request(htmx_request, my_content, wrap_fn=my_wrapper)
print("HTMX request result:")
print(result)

# Full page request - returns wrapped content
normal_request = SimpleNamespace(headers={})
result = handle_htmx_request(normal_request, my_content, wrap_fn=my_wrapper)
print("\nFull page request result:")
print(result)
HTMX request result:
<div><h1>Dashboard Content</h1></div>

Full page request result:
<div><h1>Site Header</h1><div><h1>Dashboard Content</h1></div><div>Footer</div></div>