Source code for terminusgps.django.mixins
import typing
from django.http import HttpResponse
from django.views.generic.base import TemplateResponseMixin
[docs]
class HtmxTemplateResponseMixin(TemplateResponseMixin):
"""
Renders a partial HTML template depending on HTTP headers.
`htmx documentation <https://htmx.org/docs/>`_
"""
partial_template_name: str | None = None
"""
A partial template rendered by htmx.
:type: :py:obj:`str` | :py:obj:`None`
:value: :py:obj:`None`
"""
[docs]
def render_to_response(
self, context: dict[str, typing.Any], **response_kwargs: typing.Any
) -> HttpResponse:
"""Sets :py:attr:`template_name` to :py:attr:`partial_template_name` if necessary."""
htmx_request = self.request.headers.get("HX-Request", False)
boosted = self.request.headers.get("HX-Boosted", False)
if htmx_request and self.partial_template_name and not boosted:
self.template_name = self.partial_template_name
return super().render_to_response(context, **response_kwargs)