Simple templating engine for rust, using Angular syntax. You can use the build-in Angular parser from Prettier for formatting.
- Angular syntax
- Templates are parsed at runtime. Templates can be recalculated with
templates.reload(). @if() {} @else if() {} @else {}support.@for() {}support for iteration.@defer {}support for partials. Partials can have a{{ content }}where block from@deferwill be rendered.object["value"]orobject.valuefor accessing object values
Templates can be loaded with a glob or string.
let mut templates = Templates::new();
templates.load_glob("templates/**/*.html");
let template_str =
"<table>@for(row in table) {<tr>@for(col in row) {<td>{{col}}</td>}</tr>}</table>";
templates.load_str("template", template_str);Templates are rendered with:
let ctx = json!({"table": table});
let render = templates.render("big-table.html", &ctx);
// or for load_str
let render = templates.render("template", &ctx);Context can be referenced in templates with {{ key }}.
If key is an object, values can be referenced with {{ key["value"] }} or {{ key.value }}.
If key is an array, array can be indexed with {{ key[index] }}.
Supports ==, !=, &&, ||, <, >, <=, >=,
@if (condition) {
block
}@if (condition) {
block
} @else {
otherwhere
}@if (condition) {
block
} @else if (condition) {
block
}@if (condition) {
block
} @else if (condition) {
block
} @else {
otherwhere
}Iterates over array. index is added to the context:
@for (item in items) {
{{index}}: {{item}}
}@defer (key) {}main
@defer (partial) {Hello}partial
{{ content }} World@defer (key; value="hello") {}or for variables
@defer (key; value=variable) {}