Module rocket_dyn_templates::minijinja::filters

source ·
Expand description

Filter functions and abstractions.

MiniJinja inherits from Jinja2 the concept of filter functions. These are functions which are applied to values to modify them. For example the expression {{ 42|filter(23) }} invokes the filter filter with the arguments 42 and 23.

MiniJinja comes with some built-in filters that are listed below. To create a custom filter write a function that takes at least a value, then registers it with add_filter.

§Using Filters

Using filters in templates is possible in all places an expression is permitted. This means they are not just used for printing but also are useful for iteration or similar situations.

Motivating example:

<dl>
{% for key, value in config|items %}
  <dt>{{ key }}
  <dd><pre>{{ value|tojson }}</pre>
{% endfor %}
</dl>

§Custom Filters

A custom filter is just a simple function which accepts its inputs as parameters and then returns a new value. For instance the following shows a filter which takes an input value and replaces whitespace with dashes and converts it to lowercase:

fn slugify(value: String) -> String {
    value.to_lowercase().split_whitespace().collect::<Vec<_>>().join("-")
}

env.add_filter("slugify", slugify);

MiniJinja will perform the necessary conversions automatically. For more information see the Filter trait.

§Accessing State

In some cases it can be necessary to access the execution State. Since a borrowed state implements ArgType it’s possible to add a parameter that holds the state. For instance the following filter appends the current template name to the string:

use minijinja::{Value, State};

fn append_template(state: &State, value: &Value) -> String {
    format!("{}-{}", value, state.name())
}

env.add_filter("append_template", append_template);

§Filter configuration

The recommended pattern for filters to change their behavior is to leverage global variables in the template. For instance take a filter that performs date formatting. You might want to change the default time format format on a per-template basis without having to update every filter invocation. In this case the recommended pattern is to reserve upper case variables and look them up in the filter:

use minijinja::State;

fn timeformat(state: &State, ts: f64) -> String {
    let configured_format = state.lookup("TIME_FORMAT");
    let format = configured_format
        .as_ref()
        .and_then(|x| x.as_str())
        .unwrap_or("HH:MM:SS");
    format_unix_timestamp(ts, format)
}

env.add_filter("timeformat", timeformat);

This then later lets a user override the default either by using add_global or by passing it with the context! macro or similar.

let ctx = context! {
    TIME_FORMAT => "HH:MM",
    ..other_variables
};

§Built-in Filters

When the builtins feature is enabled a range of built-in filters are automatically added to the environment. These are also all provided in this module. Note though that these functions are not to be called from Rust code as their exact interface (arguments and return types) might change from one MiniJinja version to another.

Some additional filters are available in the minijinja-contrib crate.

Traits§

  • A utility trait that represents filters.

Functions§

  • Returns the absolute value of a number.
  • Looks up an attribute.
  • Batch items.
  • Converts the value into a boolean value.
  • Convert the string with all its characters lowercased apart from the first char which is uppercased.
  • If the value is undefined it will return the passed default value, otherwise the value of the variable:
  • Dict sorting functionality.
  • Escapes a string. By default to HTML.
  • Returns the first item from an iterable.
  • Converts a value into a float.
  • Indents Value with spaces
  • Converts a value into an integer.
  • Returns a list of pairs (items) from a mapping.
  • Joins a sequence by a character
  • Returns the last item from an iterable.
  • Returns the “length” of the value
  • Converts the input value into a list.
  • Converts a value to lowercase.
  • Applies a filter to a sequence of objects or looks up an attribute.
  • Returns the largest item from an iterable.
  • Returns the smallest item from an iterable.
  • Pretty print a variable.
  • Creates a new sequence of values that don’t pass a test.
  • Creates a new sequence of values of which an attribute does not pass a test.
  • Does a string replace.
  • Reverses an iterable or string
  • Round the number to a given precision.
  • Marks a value as safe. This converts it into a string.
  • Creates a new sequence of values that pass a test.
  • Creates a new sequence of values of which an attribute passes a test.
  • Slice an iterable and return a list of lists containing those items.
  • Returns the sorted version of the given list.
  • Split a string into its substrings, using split as the separator string.
  • Converts a value to title case.
  • Dumps a value to JSON.
  • Trims a value
  • Returns a list of unique items from the given iterable.
  • Converts a value to uppercase.
  • URL encodes a value.