Awesome post, thank you! A perfect integration of htmx, django-filter and django-tables. With some minor changes also infinite scroll is possible: Add a template rendering the table rows with the last row triggering the loading of more rows (google htmx infinite-scroll. I cant post links here???) . Add url parameter lazy=1 in hx-get to flag infinite scroll request: { # templates/bootstrap_htmx_rows.html #} {% load django_tables2 %} {% load i18n %} {% for row in table.paginated_rows %} {% with lastrow=forloop.last %} {% block table.tbody.row %} <tr {{ row.attrs.as_html }} {% if lastrow and table.page.has_next %}hx-get= "{% querystring table.prefixed_page_field=table.page.next_page_number " lazy "=" 1 " %}" hx-trigger= "revealed" hx-swap= "afterend" {% endif %}> {% for column, cell in row.items %} <td {{ column.attrs.td.as_html }}>{% if column.localize == None %}{{ cell }}{% else %}{% if column.localize %}{{ cell|localize }}{% else %}{{ cell|unlocalize }}{% endif %}{% endif %}</td> {% endfor %} </tr> {% endblock table.tbody.row %} {% endwith %} {% empty %} {% if table.empty_text %} {% block table.tbody.empty_text %} <tr><td colspan= "{{ table.columns|length }}" >{{ table.empty_text }}</td></tr> {% endblock table.tbody.empty_text %} {% endif %} {% endfor %} Override the table.tbody block in bootstrap_htmx.html and make use of the row rednering template (plus clear pagination blocks): { % block table.tbody % } < tbody {{ table.attrs.tbody.as_html }} > { % include 'bootstrap_tables_htmx_rows.html' % } < / tbody > { % endblock table.tbody % } { % block pagination.previous % } { % endblock pagination.previous % } { % block pagination.range % } { % endblock pagination.range % } { % block pagination.next % } { % endblock pagination.next % } In view check if htmx request is due to infinite scroll (lazy in request.GET) then only render rows. If htmx request is due to filter/sort update the render full table. def get_template_names ( self ) : if self .request. htmx: if "lazy" in self .request. GET: # Render only rows template_name = "bootstrap_tables_htmx_rows.html" else: # Render Full table template_name = "product_table_partial.html" else: # Render full page template_name = "product_table_htmx.html" return template_name