Bengal provides powerful template filters for querying, filtering, and transforming content collections.
Collection Filters
These filters work with lists of pages, dictionaries, or any iterable.
where
Filter items where a key matches a value. Supports comparison operators.
Basic Usage:
1 2 3 4 5 | |
With Comparison Operators:
| Operator | Description | Example |
|---|---|---|
eq |
Equal (default) | where('status', 'published', 'eq') |
ne |
Not equal | where('status', 'draft', 'ne') |
gt |
Greater than | where('date', one_year_ago, 'gt') |
gte |
Greater than or equal | where('priority', 5, 'gte') |
lt |
Less than | where('weight', 100, 'lt') |
lte |
Less than or equal | where('order', 10, 'lte') |
in |
Value in list | where('tags', 'python', 'in') |
not_in |
Value not in list | where('status', ['archived'], 'not_in') |
Operator Examples:
1 2 3 4 5 6 7 8 | |
where_not
Filter items where a key does NOT equal a value.
1 2 | |
sort_by
Sort items by a key, with optional reverse order.
1 2 3 4 5 | |
group_by
Group items by a key value, returning a dictionary.
1 2 3 4 5 6 7 8 9 10 | |
limit
Take the first N items from a list.
1 2 | |
offset
Skip the first N items from a list.
1 2 | |
first / last
Get the first or last item from a list.
1 2 | |
reverse
Reverse a list (returns a new list).
{% set newest_first = chronological | reverse %}
uniq
Remove duplicate items while preserving order.
{% set unique_tags = all_tags | uniq %}
flatten
Flatten nested lists into a single list.
{% set all_tags = nested_tags | flatten | uniq %}
Set Operations
Perform set operations on lists.
union
Combine two lists, removing duplicates.
{% set combined = featured | union(recent) %}
intersect
Get items that appear in both lists.
{% set featured_python = featured | intersect(python) %}
complement
Get items in the first list that are NOT in the second list.
{% set regular = all_posts | complement(featured) %}
Chaining Filters
Filters can be chained for powerful queries:
1 2 3 4 5 6 | |
Quick Reference
| Filter | Purpose | Example |
|---|---|---|
where(key, val) |
Filter by value | pages \| where('type', 'post') |
where(key, val, 'gt') |
Greater than | pages \| where('date', cutoff, 'gt') |
where(key, val, 'in') |
Value in list | pages \| where('tags', 'python', 'in') |
where_not(key, val) |
Exclude value | pages \| where_not('draft', true) |
sort_by(key) |
Sort ascending | pages \| sort_by('title') |
sort_by(key, reverse=true) |
Sort descending | pages \| sort_by('date', reverse=true) |
group_by(key) |
Group by value | pages \| group_by('category') |
limit(n) |
Take first N | pages \| limit(5) |
offset(n) |
Skip first N | pages \| offset(10) |
first |
First item | pages \| first |
last |
Last item | pages \| last |
reverse |
Reverse order | pages \| reverse |
uniq |
Remove duplicates | tags \| uniq |
flatten |
Flatten nested lists | nested \| flatten |
union(list2) |
Combine lists | list1 \| union(list2) |
intersect(list2) |
Common items | list1 \| intersect(list2) |
complement(list2) |
Difference | list1 \| complement(list2) |
Seealso
- Variables Reference — Available template variables
- Templating — Template basics