home ~ projects ~ socials

Loop a Given Number of Times with MiniJinga

You can use MiniJinja's range() function to run a loop a specific number of times. For example:

Round and Round

---
[dependencies]
minijinja = { version = "2.9.0", features = ["custom_syntax"] }
---

use minijinja::{Environment, context};
use minijinja::syntax::SyntaxConfig;

fn main() {
    let template = r#"
Implicit Start At 0

[! for num in range(11) -!]
Number: [@ num @]
[! endfor !]

Explicit Start At 1

[! for num in range(1, 11) -!]
Number: [@ num @]
[! endfor !]

Step Count Of 2

[! for num in range(1, 11, 2) -!]
Number: [@ num @]
[! endfor -!]
    "#;

    let mut env = get_env();

    env.add_template(
        "template", template 
    ).unwrap();

    match env.get_template("template") {
        Ok(jinja) => {
            match jinja.render(context!()) {
                Ok(output) => {
                    println!("{}", output);
                }
                Err(e) => { dbg!(e); ()}
            }
        }
        Err(e) => { dbg!(e); ()}
    }
}

fn get_env() -> Environment<'static> {
    let mut env = Environment::new();
    env.set_syntax(
        SyntaxConfig::builder()
            .block_delimiters("[!", "!]")
            .variable_delimiters("[@", "@]")
            .comment_delimiters("[#", "#]")
            .build()
            .unwrap(),
    );
    env
}
Output:
Implicit Start At 0

Number: 0
Number: 1
Number: 2
Number: 3
Number: 4
Number: 5
Number: 6
Number: 7
Number: 8
Number: 9
Number: 10


Explicit Start At 1

Number: 1
Number: 2
Number: 3
Number: 4
Number: 5
Number: 6
Number: 7
Number: 8
Number: 9
Number: 10


Step Count Of 2

Number: 1
Number: 3
Number: 5
Number: 7
Number: 9
-- end of line --

Endnotes

The range docs page mentions you can decrement the range. It doesn't list how to do that. I tried range(10, 1, -1) but it threw an error.

References