# HTMX Demo ## Example Overview This example illustrates how to use `django_tomselect` with **[HTMX](https://htmx.org/)** to load a form (and its dropdowns) dynamically on page load, without a full page reload. The key piece is the `use_htmx=True` config flag, which adjusts the widget's JavaScript so Tom Select initializes correctly on HTMX-swapped content. Use this pattern when forms are injected into the page after load, such as inline editing or modal dialogs. See the bulk actions example for a more advanced HTMX use case. --- ## Key Code Segments ### Forms The `Bootstrap5StylingHTMXForm` extends `Bootstrap5StylingForm`, enabling HTMX integration. :::{admonition} Bootstrap 5 Styling with HTMX :class: dropdown ```python class Bootstrap5StylingHTMXForm(Bootstrap5StylingForm): """HTMX-enabled form using TomSelectModelChoiceField.""" tomselect = TomSelectModelChoiceField( config=TomSelectConfig( url="autocomplete-edition", use_htmx=True, # <<-- Adjusts JavaScript to work with HTMX css_framework="bootstrap5", placeholder="Select a value", highlight=True, open_on_focus=True, plugin_clear_button=PluginClearButton( title="Clear Selection", class_name="clear-button" ), ), attrs={ "class": "form-control mb-3", "id": "tomselect-custom-id", }, label="Tomselect Single", help_text=( "TomSelectModelChoiceField with single select, placeholder text, checkboxes, dropdown " "input, dropdown footer, remove, clear, edit, and highlighting" ), ) # Additional fields omitted for brevity ``` ::: - **Purpose**: Configures a field to work with HTMX, enabling dynamic content loading. --- ### HTMX Fragment Template The `htmx_fragment.html` template defines the dynamic content that will be loaded into the page. :::{admonition} HTMX Fragment Template :class: dropdown ```html {% load static %} {{ form.media }}