Filters¶
The django_htmx_plus.utils module provides filter parsing utilities for URL-based filtering in HtmxListView.
Overview¶
django-htmx-plus supports a comprehensive set of URL-based filters that map to Django ORM lookups. Filters are expressed as query parameters using the format:
field_name.filter_type=value
Filter Types¶
Exact Matching¶
status.eq=published
Filter type:
eqDjango lookup:
exactExample:
/articles/?status.eq=publishedBehavior: Case-sensitive exact match
Case-Insensitive Matching¶
title.ieq=Django
Filter type:
ieqDjango lookup:
iexactExample:
/articles/?title.ieq=djangoBehavior: Case-insensitive exact match
Text Search (case-sensitive)¶
body.like=htmx
Filter type:
likeDjango lookup:
containsExample:
/articles/?body.like=introductionBehavior: Substring match, case-sensitive
Text Search (case-insensitive)¶
title.ilike=django
Filter type:
ilikeDjango lookup:
icontainsExample:
/articles/?title.ilike=djangoBehavior: Substring match, case-insensitive
Starts With¶
title.sw=Django
Filter type:
swDjango lookup:
startswithExample:
/articles/?title.sw=DjangoBehavior: Case-sensitive prefix match
Case-Insensitive Starts With¶
title.isw=django
Filter type:
iswDjango lookup:
istartswithExample:
/articles/?title.isw=djangoBehavior: Case-insensitive prefix match
Ends With¶
title.ew=plus
Filter type:
ewDjango lookup:
endswithExample:
/articles/?title.ew=plusBehavior: Case-sensitive suffix match
Case-Insensitive Ends With¶
title.iew=plus
Filter type:
iewDjango lookup:
iendswithExample:
/articles/?title.iew=plusBehavior: Case-insensitive suffix match
Numeric Comparisons¶
- Greater Than (
gt) Filter type:
gtExample:
/articles/?views.gt=100
- Greater Than or Equal (
gte) Filter type:
gteExample:
/articles/?views.gte=100
- Less Than (
lt) Filter type:
ltExample:
/articles/?views.lt=10
- Less Than or Equal (
lte) Filter type:
lteExample:
/articles/?views.lte=10
In List¶
status.in=['draft','published']
Filter type:
inDjango lookup:
inExample:
/articles/?status.in=['draft','published']Behavior: Match if value is in the provided list
Null Check¶
deleted_at.nl=True
Filter type:
nlDjango lookup:
isnullExample:
/articles/?deleted_at.nl=TrueBehavior: Check if field is null or not null
Date/Time Range¶
created_at.rng=['2024-01-01','2024-12-31']
Filter type:
rngDjango lookup:
rangeExample:
/articles/?created_at.rng=['2024-01-01','2024-12-31']Behavior: Match values between start and end (inclusive)
Full-Text Search¶
body.sch=htmx
Filter type:
schDjango lookup:
search(PostgreSQL only)Example:
/articles/?body.sch=htmxBehavior: Full-text search using database search capabilities
Multiple Filters¶
Combine multiple filters using & in the query string:
/articles/?status.eq=published&views.gte=100&created_at.rng=['2024-01-01','2024-12-31']
All filters are applied together using an AND condition.
Field Restrictions¶
The fields attribute on HtmxListView controls which fields can be filtered:
class ArticleListView(HtmxListView):
fields = ("title", "status", "created_at") # Only these fields can be filtered
Set to ("__all__",) to allow filtering on all fields (use with caution):
class ArticleListView(HtmxListView):
fields = ("__all__",) # Allow any field
Invalid field names in filter parameters are silently ignored for security.