=========
Changelog
=========

1.27.0 (2025-11-28)
-------------------

* Drop Python 3.9 support.

* Fix CSP nonce support in the template tags when they’re the first use of ``csp_nonce``.

  `PR #572 <https://github.com/adamchainz/django-htmx/pull/572>`__.

1.26.0 (2025-09-22)
-------------------

* The :ref:`django-htmx-extension-script` now displays responses with status codes 400 (bad request) and 403 (forbidden), like the existing support for codes 404 and 500.
  This change can help you debug

  `Issue #521 <https://github.com/adamchainz/django-htmx/issues/521>`__.

* Add :func:`.reselect` to set the ``HX-Reselect`` header.

  `Issue #559 <https://github.com/adamchainz/django-htmx/issues/559>`__.

* Improve typing of :func:`.reswap` to only accept valid HTMX swap methods.

  Thanks to Thibaut Decombe in `PR #555 <https://github.com/adamchainz/django-htmx/pull/555>`__.

* Prevent :class:`.HttpResponseClientRedirect` from being called with ``preserve_request=True``, which was added to `redirect responses <https://docs.djangoproject.com/en/stable/ref/request-response/#django.http.HttpResponseRedirect>`__ in Django 5.2.
  It doesn’t make sense in the context of a client-side redirect, which always returns a status code of 200, and would crash anyway.

  `Issue #517 <https://github.com/adamchainz/django-htmx/issues/517>`__.

1.25.0 (2025-09-18)
-------------------

* Support Django 6.0.

* Add Content Security Policy (CSP) nonce support to the template tags.

  Thanks to waifudegen for the report in `Issue #542 <https://github.com/adamchainz/django-htmx/issues/542>`__.

1.24.1 (2025-09-11)
-------------------

* Upgrade the vendored htmx to `version 2.0.7 <https://github.com/bigskysoftware/htmx/blob/master/CHANGELOG.md#207---2025-09-08>`__.

1.24.0 (2025-09-10)
-------------------

* Support Python 3.14.

* Fix crashes in the extension script for custom error pages.

  Thanks to S Foster for the report in `Issue #546 <https://github.com/adamchainz/django-htmx/issues/546>`__.

1.23.2 (2025-06-27)
-------------------

* Upgrade the vendored htmx to `version 2.0.6 <https://github.com/bigskysoftware/htmx/blob/master/CHANGELOG.md#206---2025-06-27>`__.

1.23.1 (2025-06-21)
-------------------

* Upgrade the vendored htmx to `version 2.0.5 <https://github.com/bigskysoftware/htmx/blob/master/CHANGELOG.md#205---2025-06-20>`__.

1.23.0 (2025-03-14)
-------------------

* Vendor htmx.

  You can now render an htmx script tag in your templates with:

  .. code-block:: django

      {% load django_htmx %}
      {% htmx_script %}

  No need to include htmx in your project separately.

  See :doc:`template_tags` for more information.

1.22.0 (2025-02-06)
-------------------

* Support Django 5.2.

1.21.0 (2024-10-27)
-------------------

* Drop Django 3.2 to 4.1 support.

1.20.0 (2024-10-25)
-------------------

* Drop Python 3.8 support.

* Support Python 3.13.

* Updated :ref:`the partial rendering tip <partial-rendering>` to cover using django-template-partials.

  Thanks to Carlton Gibson in `PR #413 <https://github.com/adamchainz/django-htmx/pull/413>`__.

1.19.0 (2024-08-05)
-------------------

* Add :func:`django_htmx.http.replace_url` for setting the ``HX-Replace-URL`` header.

  Thanks to Bogumil Schube in `PR #396 <https://github.com/adamchainz/django-htmx/pull/396>`__.

* Add ``select`` parameter to :class:`.HttpResponseLocation`.

  Thanks to Nikola Anović in `PR #462 <https://github.com/adamchainz/django-htmx/pull/462>`__.

* Add documentation notes under :class:`.HtmxMiddleware`, covering setting the ``Vary`` header for caching and type hinting ``request.htmx``.

1.18.0 (2024-06-19)
-------------------

* Support Django 5.1.

1.17.3 (2024-03-01)
-------------------

* Change ``reswap()`` type hint for ``method`` to ``str``.

  Thanks to Dan Jacob for the report in `Issue #421 <https://github.com/adamchainz/django-htmx/issues/421>`__ and fix in `PR #422 <https://github.com/adamchainz/django-htmx/pull/422>`__.

1.17.2 (2023-11-16)
-------------------

* Fix asgiref dependency declaration.

1.17.1 (2023-11-14)
-------------------

* Fix ASGI compatibility on Python 3.12.

  Thanks to Grigory Vydrin for the report in `Issue #381 <https://github.com/adamchainz/django-htmx/issues/381>`__.

1.17.0 (2023-10-11)
-------------------

* Support Django 5.0.

1.16.0 (2023-07-10)
-------------------

* Drop Python 3.7 support.

* Remove the unnecessary ``type`` attribute on the ``<script>`` tag generated by ``django_htmx_script``.

* Allow custom JSON encoders in ``trigger_client_event()``.

  Thanks to Joey Lange in `PR #349 <https://github.com/adamchainz/django-htmx/pull/349>`__.

1.15.0 (2023-06-13)
-------------------

* Support Python 3.12.

1.14.0 (2023-02-25)
-------------------

* Support Django 4.2.

1.13.0 (2022-11-10)
-------------------

* Make the ``params`` argument of :func:`.trigger_client_event` optional.

  Thanks to Chris Tapper in `PR #263 <https://github.com/adamchainz/django-htmx/pull/263>`__.

* Add :func:`django_htmx.http.push_url` for setting the ``HX-Push-URL`` header.

  Thanks to Chris Tapper in `PR #264 <https://github.com/adamchainz/django-htmx/pull/264>`__.

* Add :func:`django_htmx.http.reswap` for setting the ``HX-Reswap`` header added in `htmx 1.8.0 <https://htmx.org/posts/2022-07-12-htmx-1-8-0-is-released/>`__.

* Add :func:`django_htmx.http.retarget` for setting the ``HX-Retarget`` header added in `htmx 1.6.1 <https://htmx.org/posts/2021-11-22-htmx-1-6-1-is-released/>`__.

* Add :class:`.HttpResponseLocation` for sending a response with the ``HX-Location`` header.

  Thanks to Ben Beecher in `PR #239 <https://github.com/adamchainz/django-htmx/pull/239>`__.

* Add :attr:`request.htmx.current_url_abs_path <.current_url_abs_path>`, the absolute-path form of ``request.current_url``.

  Thanks to Trey Hunner for the feature request in `Issue #259 <https://github.com/adamchainz/django-htmx/issues/259>`__.

1.12.2 (2022-08-31)
-------------------

* Improve type hints for ``trigger_client_event()`` by using a ``TypeVar``.

  Thanks to Chris Tapper in `PR #260 <https://github.com/adamchainz/django-htmx/pull/260>`__.

1.12.1 (2022-07-29)
-------------------

* Override ``HttpResponseClientRedirect.url`` property to fix ``HttpResponseClientRedirect.__repr__``.

1.12.0 (2022-06-05)
-------------------

* Support Python 3.11.

* Support Django 4.1.

1.11.0 (2022-05-10)
-------------------

* Drop support for Django 2.2, 3.0, and 3.1.

1.10.0 (2022-05-07)
-------------------

* Make ``trigger_client_event()`` return the response.

* Add async support to ``HtmxMiddleware`` to reduce overhead on async views.

1.9.0 (2022-03-02)
------------------

* Move documentation from the README to `Read the Docs <https://django-htmx.readthedocs.io/>`__.
  Also expand it with sections on installing htmx, and configuring CSRF.

  Thanks to Ben Beecher for initial setup in `PR #194 <https://github.com/adamchainz/django-htmx/pull/194>`__.

* Add ``HttpResponseClientRefresh`` for telling htmx to reload the page.

  Thanks to Bogumil Schube in `PR #193 <https://github.com/adamchainz/django-htmx/pull/193>`__.

1.8.0 (2022-01-10)
------------------

* Drop Python 3.6 support.

1.7.0 (2022-01-10)
------------------

* Use ``DjangoJSONEncoder`` for encoding the ``HX-Trigger`` event.

  Thanks to Cleiton de Lima in `PR #182 <https://github.com/adamchainz/django-htmx/pull/182>`__.

* Drop redundant 'async' from debug ``<script>`` tag.

1.6.0 (2021-10-06)
------------------

* Add ``HttpResponseClientRedirect`` class for sending HTMX client-side redirects.

  Thanks to Julio César in `PR #121 <https://github.com/adamchainz/django-htmx/pull/121>`__.

* Add ``django_htmx.http.trigger_client_event()`` for triggering client side events.

1.5.0 (2021-10-05)
------------------

* Support Python 3.10.

1.4.0 (2021-10-02)
------------------

* Support the ``HX-Boosted`` header, which was added in htmx 1.6.0.
  This is parsed into the ``request.htmx.boosted`` attribute.

1.3.0 (2021-09-28)
------------------

* Support Django 4.0.

1.2.1 (2021-07-09)
------------------

* Make extension script error handler also show 404 errors.

1.2.0 (2021-07-08)
------------------

* Installation now requires adding ``"django_htmx"`` to your ``INSTALLED_APPS`` setting.

* Add extension script with debug error handler.
  To install it, follow the new instructions in the README.

  htmx’s default behaviour is to discard error responses.
  The extension overrides this in debug mode to shows Django’s debug error responses.

* Add ``django_htmx.http`` module with ``HttpResponseStopPolling`` class and ``HTMX_STOP_POLLING`` constant.

1.1.0 (2021-06-03)
------------------

* Support the ``HX-History-Restore-Request`` header, which was added in htmx 1.2.0.
  This is parsed into the ``request.htmx.history_restore_request`` attribute.

* Support the ``Triggering-Event`` header, which is sent by the `event-header extension <https://github.com/bigskysoftware/htmx-extensions/blob/main/src/event-header/README.md>`__.
  This is parsed into the ``request.htmx.triggering_event`` attribute.

* Stop distributing tests to reduce package size.
  Tests are not intended to be run outside of the tox setup in the repository.
  Repackagers can use GitHub's tarballs per tag.

1.0.1 (2021-02-08)
------------------

* Remove ``X-HTTP-Method-Override`` handling from ``HtmxMiddleware``.
  This has not been needed since htmx 0.0.5, when use of the header was extracted to its ``method-override`` extension in `htmx commit 2305ae <https://github.com/bigskysoftware/htmx/commit/2305aed18e925da55f15dc5798db37ac0142f2b4>`__.

1.0.0 (2021-02-07)
------------------

* Add ``HtmxMiddleware`` which handles request headers from htmx.

* Add example app on GitHub repository which demonstrates using django-htmx features.

* Remove the ``{% htmx_script %}`` template tag.
  Include htmx on your pages yourself - this allows you to better customize the way htmx is installed to suit your project - for example by using the ``async`` script attribute or by bundling it with extensions.

* Remove the ``HTMXViewMixin``, ``{% htmx_include %}`` and ``{% htmx_attrs %}`` tags.
  Partial rendering can be done more with a simpler technique - see the demo page in the example app, added in `Pull Request #30 <https://github.com/adamchainz/django-htmx/pull/30>`__.

0.1.4 (2020-06-30)
------------------

* This version and those before explored what's possible with htmx and django, but were not documented.
