You can add a filter to a variable using a pipe (|
) character followed by the filter name and any arguments, if required. For example:
{{ "hello world" | title }}
# result
"Hello World"
will apply the filter title
to "hello world"
, producing "Hello World"
(note that the first letter of each word is now uppercase).
Multiple filters can be chained together in a single expression, as in the following example:
{{ ["hello", "world"] | join(" ") | title }}
# result
"Hello World"
will join
the values into a single string separated by a whitespace, then apply title
to the resulting string, producing the same result as in the previous snippet.
There are many built-in filters provided by Jinja and it's also possible to create custom filters.
Built-in filters can be categorized based on their functionality:
capitalize
, Â lower
, Â upper
, Â title
, Â trim
, striptags
, and escape
filters. These filters are useful for formatting text for display purposes.join
, Â first
, Â last
, Â length
, Â reverse
, sort
, map
, Â select
, and reject
filters. These filters are useful for manipulating list data.abs
, float
, int
, round
, and random
filters. These filters are useful for performing mathematical operations.default
, Â batch
filters. These filters are used for a variety of purposes such as providing default values and splitting lists into smaller lists.Let's have a look at some examples from each category.
The escape
filter  replaces those characters in the string that belong to the HTML syntax (&
, <
, >
, '
, and "
) with HTML-safe sequences.
{{ "42 > 12" | escape }}
# result
"42 > 12"
The format
filter lets you define a printf-style format string.
{% set text = "The answer is" %}
{% set num = 42 %}
{{ "%s %d" | format(text, num) }}
# result
"The answer is 42"
The replace
filter replaces the old
string with the new
one.
{{ "hello world" | replace(old="world", new="Jinja" }}
# result
hello Jinja
The truncate
filter truncates the string at the specified length (including the 3 characters of the ellipsis). By default, it discards the last word instead of truncating at the exact length, but this can be changed.
{{ "Lorem ipsum dolor sit amet, consectetur adipiscing elit." | truncate(20) }}
# result
"Lorem ipsum..."
{{ "Lorem ipsum dolor sit amet, consectetur adipiscing elit." | truncate(20, killwords=True) }}
# result
"Lorem ipsum dolor..."
Upper converts all letters in the string to upper case.
{{ "hello world" | upper }}
# result
"HELLO WORLD"
The groupby
filter lets you group items in a collection according to one of their attributes.
{% set users = [{'name': 'Sofia', 'city': 'Berlin'}, {'name': 'Mark', 'city': 'Berlin'}, {'name': 'Wouter', 'city': 'Hamburg'}] %}
{% for city, items in users | groupby('city') %}
{{ city }}
{% for user in items %}
{{ user.name }}
{% endfor %}
{% endfor %}
# result
Berlin
Sofia
Mark
Hamburg
Wouter
The map
filter lets you transform the values in a list, for example extracting a single attribute as in the following snippet
{% set users = [{'name': 'Sofia', 'city': 'Berlin'}, {'name': 'Mark', 'city': 'Berlin'}, {'name': 'Wouter', 'city': 'Hamburg'}] %}
{% for name in users | map(attribute='name') %}
{{ name }}
{% endfor %}
# result
Sofia
Mark
Wouter
You may also choose a default value that will be displayed if any element is missing the attribute.
{% set users = [{'name': 'Sofia', 'city': 'Berlin'}, {'name': 'Mark', 'city': 'Berlin'}, {'name': 'Wouter', 'city': 'Hamburg'}] %}
{% for age in users | map(attribute='age', default='N/A') %}
{{ age }}
{% endfor %}
# result
N/A
N/A
37
Suppose you have a list of numbers and you want to filter them so that you only get the even
ones:
{% set numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9] %}
{% for num in numbers | select('even') %}
{{ num }}
{% endfor %}
# result
[2, 4, 6, 8]
The second argument accepted by the select
filter is the name of a test (optionally followed by its own arguments, as necessary): the above snippet will run the even
test on each value and only accept numbers that are even.
The reject
filter behaves in the opposite way as select
, rejecting any elements that satisfy the test.
The sort
filter sorts the collection elements.
{{ [1, 9, 5, 7, 3] | sort }}
# result
[1, 3, 5, 7, 9]
You may also choose to sort elements in reverse order using sort(reverse=True)
.
If you are sorting a list of objects or dictionaries, you may choose which attribute(s) you'd like to sort by. For example:
{% set users = [{'name': 'Wendy', 'age': 29}, {'name': 'Katie', 'age': 45}] %}
{% users | sort(attribute='name') %}
# result
[{'name': 'Katie', 'age': 45}, {'name': 'Wendy', 'age': 29}]
{% users | sort(attribute='age') %}
# result
[{'name': 'Wendy', 'age': 29}, {'name': 'Katie', 'age': 45}]
The unique
filter return a list of unique elements from the given collection.
{{ [0, 1, 1, 2, 3, 5] | unique }}
# result
[0, 1, 2, 3, 5]
The abs
filter returns the absolute value of its argument.
{{ -7 | abs }}
# result
7
The int
filter converts a value into an integer value, if possible, returning a default value otherwise (0
by default).
{{ '42' | int }}
# result
42
You may change the default value that is returned when the conversion fails using the default=N
argument, for example
{{ 'not a number' | int(default=-1) }}
# result
-1
You may also change the numeric base of the input string (set to 2
in the following snippet, to handle binary numbers).
{{ '0b101010' | int(base=2) }}
# result
42
The above snippet produces the integer value 42
(equivalent to the binary value 101010
: 0b
is a prefix required by Jinja to identify binary numbers).
Valid bases are:
42
)0b
(e.g. 0b101010
)0o
(a zero followed by a lowercase o
, e.g. 0o52
)0x
(e.g. 0x2A
)The round
filter rounds a number to a given precision: by default this is 0
, meaning that it will round to an integer value. The default rounding method rounds up or down to the nearest value with the desired precision. You can change this using the second argument, which accepts the following values:
common
(default: round up or down)ceil
(always round up)floor
(always round down)
{{ 3.14159265359 | round }}
# result
3
# you can change the desired precision
{{ 3.14159265359 | round(precision=2) }}
# result
3.14
# or the rounding method
{{ 3.14159265359 | round(method='ceil') }}
# result
4
# or both
{{ 3.14159265359 | round(precision=2, method='ceil') }}
# result
3.15
Suppose you have a list of users, each with a set of attributes; all users have a name
attribute, but some of them don't have an age
attribute, so you'd like to be able to display some default value whenever the attribute is missing. This is where the default
filter can help:
{% set users = [{'name': 'John', 'age': 21}, {'name': 'Andrea'}] %}
{% for user in users %}
{{ user.name }}, {{ user.age | default('N/A') }}
{% endfor %}
# result
John, 21
Andrea, N/A
Sign up and start using PushMetrics for free.
Or schedule a demo and discuss your use case.