1 个不稳定版本
0.1.0 | 2022年12月20日 |
---|
#431 in 模板引擎
10KB
88 行
simpletemplate
完全用 Rust 编写的模板引擎。
用法
// main.rs
use simpletemplate::render;
use serde_json::{json};
fn main() {
let data = json!({
"name": ["Bob Belcher"],
});
let content = "{{ name }}";
let res = render(content, data);
println!("{}", res); //returns Bob Belcher
}
模板用法
对于变量,使用 {{ variable_name }}
。
对于数组索引,使用 {{ array_name[index] }}
。
要遍历数组
{{ for loop_variable in loop_iterable }}
loop_body
{{ endfor }}
要访问索引
{{ for loop_variable in loop_iterable }}
{{ index }}
{{ endfor }}
条件语句:如果 condition
不是 null
、false
或 "false"
,则渲染 if_body
。
{{ if condition }}
if_body
{{ else }}
else_body
{{ endif }}
查看 src/main.rs
了解如何从 HTML 文件中渲染。
lib.rs
:
渲染 HTML 模板。
示例
// variables
let data = json!({ "foo": "bar" });
let template = r"{{ foo }}";
let expected = "bar";
assert_eq!(render(template, data), expected);
// logic statements
let data = json!({ "foo": "bar" });
let template = r"{{ if foo }}{{ foo }}{{ else }}foo is not set{{ endif }}";
let expected = "bar";
assert_eq!(render(template, data), expected);
let data = json!({ "foo": null });
let template = r"{{ if foo }}{{ foo }}{{ else }}foo is not set{{ endif }}";
let expected = "foo is not set";
assert_eq!(render(template, data), expected);
// for loop
let data = json!({ "items": ["a", "b", "c"] });
let template = r"{{ for item in items }}{{ item }}{{ endfor }}";
let expected = "abc";
assert_eq!(render(template, data), expected);
let data = json!({ "items": [] });
let template = r"{{ for item in items }}{{ item }}{{ endfor }}";
let expected = "";
assert_eq!(render(template, data), expected);
// accessing by index
let data = json!({ "items": ["a", "b", "c"] });
let template = r"{{ items[0] }}";
let expected = "a";
assert_eq!(render(template, data), expected);
let data = json!({ "items": ["a", "b", "c"] });
let template = r"{{ items[1] }}";
let expected = "b";
assert_eq!(render(template, data), expected);
let data = json!({ "items": ["a", "b", "c"] });
let template = r"{{ items[2] }}";
let expected = "c";
assert_eq!(render(template, data), expected);
// combining logic
let data = json!({
"foo": "bar",
"items": ["a", "b", "c"],
"show_items": true,
"show_foo": false,
});
let template = r"{{ if show_items }}{{ for item in items }}{{ item }}{{ endfor }}{{ endif }}{{ if show_foo }}{{ foo }}{{ endif }}";
let expected = "abc";
assert_eq!(render(template, data), expected);
let data = json!({
"foo": "bar",
"items": ["a", "b", "c"],
"show_items": true,
"show_foo": false,
});
let template = r"{{ if show_items }}{{ for item in items }}{{ item }}{{ endfor }}{{ endif }}{{ if show_foo }}{{ foo }}{{ else }}foo is not set{{ endif }}";
let expected = "abcfoo is not set";
assert_eq!(render(template, data), expected);
// blank template
let data = json!({});
let template = "";
let expected = "";
assert_eq!(render(template, data), expected);
// invalid variable
let data = json!({ "foo": "bar" });
let template = "{{ baz }}";
let expected = "null";
assert_eq!(render(template, data), expected);
// invalid index
let data = json!({ "items": ["a", "b", "c"] });
let template = "{{ items[5] }}";
let expected = "null";
assert_eq!(render(template, data), expected);
// invalid statement
let data = json!({});
let template = "{{ if foo }}{{ endif }}";
let expected = "";
assert_eq!(render(template, data), expected);
依赖项
~2.4–4MB
~70K SLoC