Module tera

Text template engine based on Jinja2/Django.


tera is a template engine inspired by Jinja2 and the Django template language. It compiles templates to an internal representation and renders them with a Context holding the variables. Templates support inheritance, includes, for loops, conditionals, filters, and custom functions.

The main entry point is the Tera struct, which loads and caches templates. For one-off rendering without managing a template collection, Tera::one_off renders a template string directly.

Examples

Rendering a template from a string:

use tera::{Tera, Context};

let mut tera = Tera::default();
tera.add_raw_template("greeting", "Hello, {{ name }}!").unwrap();

let mut ctx = Context::new();
ctx.insert("name", "Rust");

let output = tera.render("greeting", &ctx).unwrap();
assert_eq!(output, "Hello, Rust!");

Using loops and conditionals:

use tera::{Tera, Context};

let template = "{% for item in items %}{% if item.active %}{{ item.label }}, {% endif %}{% endfor %}";

let mut tera = Tera::default();
tera.add_raw_template("list", template).unwrap();

let mut ctx = Context::new();
ctx.insert("items", &vec![
    serde_json::json!({"label": "alpha", "active": true}),
    serde_json::json!({"label": "beta", "active": false}),
    serde_json::json!({"label": "gamma", "active": true}),
]);

let output = tera.render("list", &ctx).unwrap();
assert_eq!(output, "alpha, gamma, ");

Quick one-off rendering without creating a Tera instance:

use tera::{Tera, Context};

let mut ctx = Context::new();
ctx.insert("count", &3);

let output = Tera::one_off("There are {{ count }} lights.", &ctx, false).unwrap();
assert_eq!(output, "There are 3 lights.");

Modules

Macros