How To Add Headers To Responses

There are times when you need to add headers to the response returned from the server. HTMX uses specific headers to modify behavior when certain headers are present.

Common HTMX response headers include:

  • `Hx-Triggers` - Triggers client-side events when the response is returned.

  • `Hx-Redirect` - Redirects the user to a new page.

  • `Hx-Refresh` - Refreshes the page.

Adding Headers

The easiest way to add headers to a response is by overriding the get_headers method in an HxRequest.

from hx_requests.hx_requests import BaseHxRequest

class MyHxRequest(BaseHxRequest):
    ....

    def get_headers(self, **kwargs):
        headers = super().get_headers(**kwargs)
        headers["Some-Header"] = "Some Value"
        return headers

Hx-Trigger

Since triggers are commonly used, a helper method is available to add them to the headers.

from hx_requests.hx_requests import BaseHxRequest

class MyHxRequest(BaseHxRequest):
    ....

    def get_triggers(self, **kwargs):
        triggers = super().get_triggers(**kwargs)
        triggers.append("some_trigger")
        return triggers

Hx-Trigger With Details

You can pass details along with a trigger by using a dict instead of a string. When any trigger carries details, the header is automatically formatted as a JSON object per the HX-Trigger spec.

from hx_requests.hx_requests import BaseHxRequest

class MyHxRequest(BaseHxRequest):
    ....

    def get_triggers(self, **kwargs):
        triggers = super().get_triggers(**kwargs)
        triggers.append({"showMessage": {"level": "info", "message": "Saved!"}})
        return triggers

You can also mix plain triggers and triggers with details:

def get_triggers(self, **kwargs):
    triggers = super().get_triggers(**kwargs)
    triggers.append("refreshList")
    triggers.append({"showMessage": "Item saved successfully"})
    return triggers

This produces the header: HX-Trigger: {"refreshList": true, "showMessage": "Item saved successfully"}

Refresh and Redirect

If you need to refresh the page or redirect to another page, use the refresh_page or redirect attributes.

from hx_requests.hx_requests import BaseHxRequest

class MyHxRequest(BaseHxRequest):
    ....
    refresh_page = True # This will refresh the page
    redirect = "some_url" # This will redirect to some_url

If you need to set refresh_page or redirect dynamically, you can modify them anywhere in the request lifecycle.

from hx_requests.hx_requests import FormHxRequest

class MyHxRequest(FormHxRequest):
    ....
    refresh_page = True

    def form_invalid(self, **kwargs):
        self.refresh_page = False
        return super().form_invalid(form)