pub struct TemplateEngine { /* private fields */ }Expand description
模板引擎结构体
Implementations§
Source§impl TemplateEngine
impl TemplateEngine
Sourcepub fn new() -> Self
pub fn new() -> Self
创建新的模板引擎实例
Examples found in repository?
examples/detailed_test.rs (line 5)
4fn main() -> Result<(), Box<dyn std::error::Error>> {
5 let mut engine = TemplateEngine::new();
6 engine.set_variable("items", json!(["apple", "banana", "cherry"]));
7
8 let template = r#"
9 {% for item in items %}
10 - {{ item }}
11 {% endfor }"#;
12
13 println!("原始模板:");
14 for (i, line) in template.lines().enumerate() {
15 println!("{}: {:?}", i, line);
16 }
17
18 // 测试不保留换行符的行为
19 engine.set_preserve_loop_newlines(false);
20 let result = engine.render_string(template)?;
21 println!("处理结果:");
22 for (i, line) in result.lines().enumerate() {
23 println!("{}: {:?}", i, line);
24 }
25
26 Ok(())
27}More examples
examples/indent_test.rs (line 5)
4fn main() -> Result<(), Box<dyn std::error::Error>> {
5 let mut engine = TemplateEngine::new();
6 engine.set_variable("items", json!(["apple", "banana", "cherry"]));
7
8 // 测试带缩进的模板
9 let template = r#"
10 {% for item in items %}
11 - {{ item }}
12 {% endfor %}"#;
13
14 println!("带缩进模板: {}", template);
15
16 // 测试默认行为
17 let result = engine.render_string(template)?;
18 println!("默认结果: {:?}", result);
19
20 // 测试不保留换行符
21 engine.set_preserve_loop_newlines(false);
22 let result = engine.render_string(template)?;
23 println!("不保留换行符结果: {:?}", result);
24
25 Ok(())
26}examples/simple_test.rs (line 5)
4fn main() -> Result<(), Box<dyn std::error::Error>> {
5 let mut engine = TemplateEngine::new();
6 engine.set_variable("items", json!(["apple", "banana", "cherry"]));
7
8 // 测试简单的模板
9 let simple_template = "{% for item in items %}- {{ item }}{% endfor %}";
10 println!("简单模板: {}", simple_template);
11
12 let result = engine.render_string(simple_template)?;
13 println!("简单结果: {}", result);
14
15 // 测试带换行的模板
16 let template = "
17{% for item in items %}
18- {{ item }}
19{% endfor %}";
20 println!("带换行模板: {}", template);
21
22 let result = engine.render_string(template)?;
23 println!("带换行结果: {}", result);
24
25 Ok(())
26}examples/debug_test.rs (line 5)
4fn main() -> Result<(), Box<dyn std::error::Error>> {
5 let mut engine = TemplateEngine::new();
6 engine.set_variable("items", json!(["apple", "banana", "cherry"]));
7
8 let template = r#"
9 {% for item in items %}
10 - {{ item }}
11 {% endfor %}"#;
12
13 // 测试默认保留换行符的行为
14 let result = engine.render_string(template)?;
15 println!("默认行为结果:");
16 println!("{:?}", result);
17 println!("实际输出:");
18 println!("{}", result);
19
20 // 测试不保留换行符的行为
21 let result = engine.set_preserve_loop_newlines(false).render_string(template)?;
22 println!("不保留换行符结果:");
23 println!("{:?}", result);
24 println!("实际输出:");
25 println!("{}", result);
26
27 Ok(())
28}examples/loop_newlines.rs (line 8)
4fn main() -> Result<(), Box<dyn std::error::Error>> {
5 println!("=== 测试循环换行符控制 ===");
6
7 // 测试默认保留换行符
8 let mut engine = TemplateEngine::new();
9 engine.set_variable("items", json!(["apple", "banana", "cherry"]));
10
11 let template = r#"
12{% for item in items %}
13- {{ item }}
14{% endfor %}"#;
15
16 let result = engine.render_string(template)?;
17 println!("保留换行符的结果:{}", result);
18
19 // 测试去除换行符
20 engine.set_preserve_loop_newlines(false);
21 let result = engine.render_string(template)?;
22 println!("去除换行符的结果:{}", result);
23
24 // 测试更复杂的模板
25 let template2 = r#"
26<ul>
27{% for item in items %}
28 <li>{{ item }}</li>
29{% endfor %}
30</ul>"#;
31
32 let mut engine2 = TemplateEngine::new();
33 engine2.set_variable("items", json!(["red", "green", "blue"]));
34
35 let result = engine2.render_string(template2)?;
36 println!("保留换行符的复杂模板:{}", result);
37
38 engine2.set_preserve_loop_newlines(false);
39 let result = engine2.render_string(template2)?;
40 println!("去除换行符的复杂模板:{}", result);
41
42 println!("=== 测试完成 ===");
43 Ok(())
44}examples/custom_for_tags.rs (line 8)
4fn main() -> Result<(), Box<dyn std::error::Error>> {
5 println!("=== 测试自定义For循环标签 ===");
6
7 // 测试默认的{%和%}标签
8 let mut engine = TemplateEngine::new();
9 engine.set_variable("items", json!(["apple", "banana", "cherry"]));
10
11 let template = r#"
12{% for item in items %}
13- {{ item }}
14{% endfor %}"#;
15
16 let result = engine.render_string(template)?;
17 println!("默认标签测试:{}", result);
18
19 // 测试自定义的<%和%>标签
20 let mut custom_engine = TemplateEngine::with_all_delimiters("{{", "}}", "<%", "%>");
21 custom_engine.set_variable("fruits", json!(["orange", "grape", "lemon"]));
22
23 let template = r#"
24<% for fruit in fruits %>
25* {{ fruit }}
26<% endfor %>"#;
27
28 let result = custom_engine.render_string(template)?;
29 println!("自定义标签测试:{}", result);
30
31 // 测试自定义的[[和]]标签
32 let mut custom_engine2 = TemplateEngine::with_all_delimiters("{{", "}}", "[[", "]]");
33 custom_engine2.set_variable("numbers", json!(["one", "two", "three"]));
34
35 let template = r#"
36[[ for num in numbers ]]
37+ {{ num }}
38[[ endfor ]]"#;
39
40 let result = custom_engine2.render_string(template)?;
41 println!("自定义标签测试2:{}", result);
42
43 println!("=== 测试完成 ===");
44 Ok(())
45}Additional examples can be found in:
Sourcepub fn with_delimiters(left: &str, right: &str) -> Self
pub fn with_delimiters(left: &str, right: &str) -> Self
使用自定义定界符创建模板引擎实例
Examples found in repository?
examples/template_demo.rs (line 39)
4fn main() -> Result<(), Box<dyn std::error::Error>> {
5 println!("=== 测试模板引擎完整功能 ===");
6
7 // 测试基本变量替换
8 let mut engine = TemplateEngine::new();
9 engine.set_variable("name", "World");
10 engine.set_variable("age", 25);
11
12 let result = engine.render_string("Hello, {{ name }}! You are {{ age }} years old.")?;
13 println!("变量替换测试: {}", result);
14
15 // 测试嵌套变量访问
16 engine.set_variable("user", json!({
17 "name": "Alice",
18 "profile": {
19 "age": 30,
20 "city": "Beijing"
21 }
22 }));
23
24 let result = engine.render_string("Name: {{ user.name }}, City: {{ user.profile.city }}")?;
25 println!("嵌套变量测试: {}", result);
26
27 // 测试for循环
28 engine.set_variable("items", json!(["apple", "banana", "cherry"]));
29
30 let template = r#"
31{% for item in items %}
32- {{ item }}
33{% endfor %}"#;
34
35 let result = engine.render_string(template)?;
36 println!("For循环测试:{}", result);
37
38 // 测试自定义定界符
39 let mut custom_engine = TemplateEngine::with_delimiters("${", "}");
40 custom_engine.set_variable("name", "Custom");
41
42 let result = custom_engine.render_string("Hello, ${ name }!")?;
43 println!("自定义定界符测试: {}", result);
44
45 // 测试复杂模板
46 engine.set_variable("title", "User List");
47 engine.set_variable("users", json!([
48 {"name": "Alice", "age": 25},
49 {"name": "Bob", "age": 30},
50 {"name": "Charlie", "age": 35}
51 ]));
52
53 let template = r#"
54<h1>{{ title }}</h1>
55<ul>
56{% for user in users %}
57 <li>{{ user.name }} ({{ user.age }} years old)</li>
58{% endfor %}
59</ul>"#;
60
61 let result = engine.render_string(template)?;
62 println!("复杂模板测试:{}", result);
63
64 println!("=== 所有测试完成 ===");
65 Ok(())
66}Sourcepub fn with_all_delimiters(
var_left: &str,
var_right: &str,
for_left: &str,
for_right: &str,
) -> Self
pub fn with_all_delimiters( var_left: &str, var_right: &str, for_left: &str, for_right: &str, ) -> Self
使用自定义定界符创建模板引擎实例,包括for循环定界符
Examples found in repository?
examples/custom_for_tags.rs (line 20)
4fn main() -> Result<(), Box<dyn std::error::Error>> {
5 println!("=== 测试自定义For循环标签 ===");
6
7 // 测试默认的{%和%}标签
8 let mut engine = TemplateEngine::new();
9 engine.set_variable("items", json!(["apple", "banana", "cherry"]));
10
11 let template = r#"
12{% for item in items %}
13- {{ item }}
14{% endfor %}"#;
15
16 let result = engine.render_string(template)?;
17 println!("默认标签测试:{}", result);
18
19 // 测试自定义的<%和%>标签
20 let mut custom_engine = TemplateEngine::with_all_delimiters("{{", "}}", "<%", "%>");
21 custom_engine.set_variable("fruits", json!(["orange", "grape", "lemon"]));
22
23 let template = r#"
24<% for fruit in fruits %>
25* {{ fruit }}
26<% endfor %>"#;
27
28 let result = custom_engine.render_string(template)?;
29 println!("自定义标签测试:{}", result);
30
31 // 测试自定义的[[和]]标签
32 let mut custom_engine2 = TemplateEngine::with_all_delimiters("{{", "}}", "[[", "]]");
33 custom_engine2.set_variable("numbers", json!(["one", "two", "three"]));
34
35 let template = r#"
36[[ for num in numbers ]]
37+ {{ num }}
38[[ endfor ]]"#;
39
40 let result = custom_engine2.render_string(template)?;
41 println!("自定义标签测试2:{}", result);
42
43 println!("=== 测试完成 ===");
44 Ok(())
45}Sourcepub fn set_template_dir<P: AsRef<Path>>(&mut self, path: P) -> &mut Self
pub fn set_template_dir<P: AsRef<Path>>(&mut self, path: P) -> &mut Self
设置模板目录
Sourcepub fn set_variable<K: Into<String>, V: Into<Value>>(
&mut self,
key: K,
value: V,
) -> &mut Self
pub fn set_variable<K: Into<String>, V: Into<Value>>( &mut self, key: K, value: V, ) -> &mut Self
设置变量
Examples found in repository?
examples/detailed_test.rs (line 6)
4fn main() -> Result<(), Box<dyn std::error::Error>> {
5 let mut engine = TemplateEngine::new();
6 engine.set_variable("items", json!(["apple", "banana", "cherry"]));
7
8 let template = r#"
9 {% for item in items %}
10 - {{ item }}
11 {% endfor }"#;
12
13 println!("原始模板:");
14 for (i, line) in template.lines().enumerate() {
15 println!("{}: {:?}", i, line);
16 }
17
18 // 测试不保留换行符的行为
19 engine.set_preserve_loop_newlines(false);
20 let result = engine.render_string(template)?;
21 println!("处理结果:");
22 for (i, line) in result.lines().enumerate() {
23 println!("{}: {:?}", i, line);
24 }
25
26 Ok(())
27}More examples
examples/indent_test.rs (line 6)
4fn main() -> Result<(), Box<dyn std::error::Error>> {
5 let mut engine = TemplateEngine::new();
6 engine.set_variable("items", json!(["apple", "banana", "cherry"]));
7
8 // 测试带缩进的模板
9 let template = r#"
10 {% for item in items %}
11 - {{ item }}
12 {% endfor %}"#;
13
14 println!("带缩进模板: {}", template);
15
16 // 测试默认行为
17 let result = engine.render_string(template)?;
18 println!("默认结果: {:?}", result);
19
20 // 测试不保留换行符
21 engine.set_preserve_loop_newlines(false);
22 let result = engine.render_string(template)?;
23 println!("不保留换行符结果: {:?}", result);
24
25 Ok(())
26}examples/simple_test.rs (line 6)
4fn main() -> Result<(), Box<dyn std::error::Error>> {
5 let mut engine = TemplateEngine::new();
6 engine.set_variable("items", json!(["apple", "banana", "cherry"]));
7
8 // 测试简单的模板
9 let simple_template = "{% for item in items %}- {{ item }}{% endfor %}";
10 println!("简单模板: {}", simple_template);
11
12 let result = engine.render_string(simple_template)?;
13 println!("简单结果: {}", result);
14
15 // 测试带换行的模板
16 let template = "
17{% for item in items %}
18- {{ item }}
19{% endfor %}";
20 println!("带换行模板: {}", template);
21
22 let result = engine.render_string(template)?;
23 println!("带换行结果: {}", result);
24
25 Ok(())
26}examples/debug_test.rs (line 6)
4fn main() -> Result<(), Box<dyn std::error::Error>> {
5 let mut engine = TemplateEngine::new();
6 engine.set_variable("items", json!(["apple", "banana", "cherry"]));
7
8 let template = r#"
9 {% for item in items %}
10 - {{ item }}
11 {% endfor %}"#;
12
13 // 测试默认保留换行符的行为
14 let result = engine.render_string(template)?;
15 println!("默认行为结果:");
16 println!("{:?}", result);
17 println!("实际输出:");
18 println!("{}", result);
19
20 // 测试不保留换行符的行为
21 let result = engine.set_preserve_loop_newlines(false).render_string(template)?;
22 println!("不保留换行符结果:");
23 println!("{:?}", result);
24 println!("实际输出:");
25 println!("{}", result);
26
27 Ok(())
28}examples/loop_newlines.rs (line 9)
4fn main() -> Result<(), Box<dyn std::error::Error>> {
5 println!("=== 测试循环换行符控制 ===");
6
7 // 测试默认保留换行符
8 let mut engine = TemplateEngine::new();
9 engine.set_variable("items", json!(["apple", "banana", "cherry"]));
10
11 let template = r#"
12{% for item in items %}
13- {{ item }}
14{% endfor %}"#;
15
16 let result = engine.render_string(template)?;
17 println!("保留换行符的结果:{}", result);
18
19 // 测试去除换行符
20 engine.set_preserve_loop_newlines(false);
21 let result = engine.render_string(template)?;
22 println!("去除换行符的结果:{}", result);
23
24 // 测试更复杂的模板
25 let template2 = r#"
26<ul>
27{% for item in items %}
28 <li>{{ item }}</li>
29{% endfor %}
30</ul>"#;
31
32 let mut engine2 = TemplateEngine::new();
33 engine2.set_variable("items", json!(["red", "green", "blue"]));
34
35 let result = engine2.render_string(template2)?;
36 println!("保留换行符的复杂模板:{}", result);
37
38 engine2.set_preserve_loop_newlines(false);
39 let result = engine2.render_string(template2)?;
40 println!("去除换行符的复杂模板:{}", result);
41
42 println!("=== 测试完成 ===");
43 Ok(())
44}examples/custom_for_tags.rs (line 9)
4fn main() -> Result<(), Box<dyn std::error::Error>> {
5 println!("=== 测试自定义For循环标签 ===");
6
7 // 测试默认的{%和%}标签
8 let mut engine = TemplateEngine::new();
9 engine.set_variable("items", json!(["apple", "banana", "cherry"]));
10
11 let template = r#"
12{% for item in items %}
13- {{ item }}
14{% endfor %}"#;
15
16 let result = engine.render_string(template)?;
17 println!("默认标签测试:{}", result);
18
19 // 测试自定义的<%和%>标签
20 let mut custom_engine = TemplateEngine::with_all_delimiters("{{", "}}", "<%", "%>");
21 custom_engine.set_variable("fruits", json!(["orange", "grape", "lemon"]));
22
23 let template = r#"
24<% for fruit in fruits %>
25* {{ fruit }}
26<% endfor %>"#;
27
28 let result = custom_engine.render_string(template)?;
29 println!("自定义标签测试:{}", result);
30
31 // 测试自定义的[[和]]标签
32 let mut custom_engine2 = TemplateEngine::with_all_delimiters("{{", "}}", "[[", "]]");
33 custom_engine2.set_variable("numbers", json!(["one", "two", "three"]));
34
35 let template = r#"
36[[ for num in numbers ]]
37+ {{ num }}
38[[ endfor ]]"#;
39
40 let result = custom_engine2.render_string(template)?;
41 println!("自定义标签测试2:{}", result);
42
43 println!("=== 测试完成 ===");
44 Ok(())
45}Additional examples can be found in:
Sourcepub fn set_variables(&mut self, vars: HashMap<String, Value>) -> &mut Self
pub fn set_variables(&mut self, vars: HashMap<String, Value>) -> &mut Self
批量设置变量
Sourcepub fn set_preserve_loop_newlines(&mut self, preserve: bool) -> &mut Self
pub fn set_preserve_loop_newlines(&mut self, preserve: bool) -> &mut Self
设置是否保留循环中的换行符
Examples found in repository?
examples/detailed_test.rs (line 19)
4fn main() -> Result<(), Box<dyn std::error::Error>> {
5 let mut engine = TemplateEngine::new();
6 engine.set_variable("items", json!(["apple", "banana", "cherry"]));
7
8 let template = r#"
9 {% for item in items %}
10 - {{ item }}
11 {% endfor }"#;
12
13 println!("原始模板:");
14 for (i, line) in template.lines().enumerate() {
15 println!("{}: {:?}", i, line);
16 }
17
18 // 测试不保留换行符的行为
19 engine.set_preserve_loop_newlines(false);
20 let result = engine.render_string(template)?;
21 println!("处理结果:");
22 for (i, line) in result.lines().enumerate() {
23 println!("{}: {:?}", i, line);
24 }
25
26 Ok(())
27}More examples
examples/indent_test.rs (line 21)
4fn main() -> Result<(), Box<dyn std::error::Error>> {
5 let mut engine = TemplateEngine::new();
6 engine.set_variable("items", json!(["apple", "banana", "cherry"]));
7
8 // 测试带缩进的模板
9 let template = r#"
10 {% for item in items %}
11 - {{ item }}
12 {% endfor %}"#;
13
14 println!("带缩进模板: {}", template);
15
16 // 测试默认行为
17 let result = engine.render_string(template)?;
18 println!("默认结果: {:?}", result);
19
20 // 测试不保留换行符
21 engine.set_preserve_loop_newlines(false);
22 let result = engine.render_string(template)?;
23 println!("不保留换行符结果: {:?}", result);
24
25 Ok(())
26}examples/debug_test.rs (line 21)
4fn main() -> Result<(), Box<dyn std::error::Error>> {
5 let mut engine = TemplateEngine::new();
6 engine.set_variable("items", json!(["apple", "banana", "cherry"]));
7
8 let template = r#"
9 {% for item in items %}
10 - {{ item }}
11 {% endfor %}"#;
12
13 // 测试默认保留换行符的行为
14 let result = engine.render_string(template)?;
15 println!("默认行为结果:");
16 println!("{:?}", result);
17 println!("实际输出:");
18 println!("{}", result);
19
20 // 测试不保留换行符的行为
21 let result = engine.set_preserve_loop_newlines(false).render_string(template)?;
22 println!("不保留换行符结果:");
23 println!("{:?}", result);
24 println!("实际输出:");
25 println!("{}", result);
26
27 Ok(())
28}examples/loop_newlines.rs (line 20)
4fn main() -> Result<(), Box<dyn std::error::Error>> {
5 println!("=== 测试循环换行符控制 ===");
6
7 // 测试默认保留换行符
8 let mut engine = TemplateEngine::new();
9 engine.set_variable("items", json!(["apple", "banana", "cherry"]));
10
11 let template = r#"
12{% for item in items %}
13- {{ item }}
14{% endfor %}"#;
15
16 let result = engine.render_string(template)?;
17 println!("保留换行符的结果:{}", result);
18
19 // 测试去除换行符
20 engine.set_preserve_loop_newlines(false);
21 let result = engine.render_string(template)?;
22 println!("去除换行符的结果:{}", result);
23
24 // 测试更复杂的模板
25 let template2 = r#"
26<ul>
27{% for item in items %}
28 <li>{{ item }}</li>
29{% endfor %}
30</ul>"#;
31
32 let mut engine2 = TemplateEngine::new();
33 engine2.set_variable("items", json!(["red", "green", "blue"]));
34
35 let result = engine2.render_string(template2)?;
36 println!("保留换行符的复杂模板:{}", result);
37
38 engine2.set_preserve_loop_newlines(false);
39 let result = engine2.render_string(template2)?;
40 println!("去除换行符的复杂模板:{}", result);
41
42 println!("=== 测试完成 ===");
43 Ok(())
44}Sourcepub fn render_string(&self, template: &str) -> Result<String>
pub fn render_string(&self, template: &str) -> Result<String>
渲染模板字符串
Examples found in repository?
examples/detailed_test.rs (line 20)
4fn main() -> Result<(), Box<dyn std::error::Error>> {
5 let mut engine = TemplateEngine::new();
6 engine.set_variable("items", json!(["apple", "banana", "cherry"]));
7
8 let template = r#"
9 {% for item in items %}
10 - {{ item }}
11 {% endfor }"#;
12
13 println!("原始模板:");
14 for (i, line) in template.lines().enumerate() {
15 println!("{}: {:?}", i, line);
16 }
17
18 // 测试不保留换行符的行为
19 engine.set_preserve_loop_newlines(false);
20 let result = engine.render_string(template)?;
21 println!("处理结果:");
22 for (i, line) in result.lines().enumerate() {
23 println!("{}: {:?}", i, line);
24 }
25
26 Ok(())
27}More examples
examples/indent_test.rs (line 17)
4fn main() -> Result<(), Box<dyn std::error::Error>> {
5 let mut engine = TemplateEngine::new();
6 engine.set_variable("items", json!(["apple", "banana", "cherry"]));
7
8 // 测试带缩进的模板
9 let template = r#"
10 {% for item in items %}
11 - {{ item }}
12 {% endfor %}"#;
13
14 println!("带缩进模板: {}", template);
15
16 // 测试默认行为
17 let result = engine.render_string(template)?;
18 println!("默认结果: {:?}", result);
19
20 // 测试不保留换行符
21 engine.set_preserve_loop_newlines(false);
22 let result = engine.render_string(template)?;
23 println!("不保留换行符结果: {:?}", result);
24
25 Ok(())
26}examples/simple_test.rs (line 12)
4fn main() -> Result<(), Box<dyn std::error::Error>> {
5 let mut engine = TemplateEngine::new();
6 engine.set_variable("items", json!(["apple", "banana", "cherry"]));
7
8 // 测试简单的模板
9 let simple_template = "{% for item in items %}- {{ item }}{% endfor %}";
10 println!("简单模板: {}", simple_template);
11
12 let result = engine.render_string(simple_template)?;
13 println!("简单结果: {}", result);
14
15 // 测试带换行的模板
16 let template = "
17{% for item in items %}
18- {{ item }}
19{% endfor %}";
20 println!("带换行模板: {}", template);
21
22 let result = engine.render_string(template)?;
23 println!("带换行结果: {}", result);
24
25 Ok(())
26}examples/debug_test.rs (line 14)
4fn main() -> Result<(), Box<dyn std::error::Error>> {
5 let mut engine = TemplateEngine::new();
6 engine.set_variable("items", json!(["apple", "banana", "cherry"]));
7
8 let template = r#"
9 {% for item in items %}
10 - {{ item }}
11 {% endfor %}"#;
12
13 // 测试默认保留换行符的行为
14 let result = engine.render_string(template)?;
15 println!("默认行为结果:");
16 println!("{:?}", result);
17 println!("实际输出:");
18 println!("{}", result);
19
20 // 测试不保留换行符的行为
21 let result = engine.set_preserve_loop_newlines(false).render_string(template)?;
22 println!("不保留换行符结果:");
23 println!("{:?}", result);
24 println!("实际输出:");
25 println!("{}", result);
26
27 Ok(())
28}examples/loop_newlines.rs (line 16)
4fn main() -> Result<(), Box<dyn std::error::Error>> {
5 println!("=== 测试循环换行符控制 ===");
6
7 // 测试默认保留换行符
8 let mut engine = TemplateEngine::new();
9 engine.set_variable("items", json!(["apple", "banana", "cherry"]));
10
11 let template = r#"
12{% for item in items %}
13- {{ item }}
14{% endfor %}"#;
15
16 let result = engine.render_string(template)?;
17 println!("保留换行符的结果:{}", result);
18
19 // 测试去除换行符
20 engine.set_preserve_loop_newlines(false);
21 let result = engine.render_string(template)?;
22 println!("去除换行符的结果:{}", result);
23
24 // 测试更复杂的模板
25 let template2 = r#"
26<ul>
27{% for item in items %}
28 <li>{{ item }}</li>
29{% endfor %}
30</ul>"#;
31
32 let mut engine2 = TemplateEngine::new();
33 engine2.set_variable("items", json!(["red", "green", "blue"]));
34
35 let result = engine2.render_string(template2)?;
36 println!("保留换行符的复杂模板:{}", result);
37
38 engine2.set_preserve_loop_newlines(false);
39 let result = engine2.render_string(template2)?;
40 println!("去除换行符的复杂模板:{}", result);
41
42 println!("=== 测试完成 ===");
43 Ok(())
44}examples/custom_for_tags.rs (line 16)
4fn main() -> Result<(), Box<dyn std::error::Error>> {
5 println!("=== 测试自定义For循环标签 ===");
6
7 // 测试默认的{%和%}标签
8 let mut engine = TemplateEngine::new();
9 engine.set_variable("items", json!(["apple", "banana", "cherry"]));
10
11 let template = r#"
12{% for item in items %}
13- {{ item }}
14{% endfor %}"#;
15
16 let result = engine.render_string(template)?;
17 println!("默认标签测试:{}", result);
18
19 // 测试自定义的<%和%>标签
20 let mut custom_engine = TemplateEngine::with_all_delimiters("{{", "}}", "<%", "%>");
21 custom_engine.set_variable("fruits", json!(["orange", "grape", "lemon"]));
22
23 let template = r#"
24<% for fruit in fruits %>
25* {{ fruit }}
26<% endfor %>"#;
27
28 let result = custom_engine.render_string(template)?;
29 println!("自定义标签测试:{}", result);
30
31 // 测试自定义的[[和]]标签
32 let mut custom_engine2 = TemplateEngine::with_all_delimiters("{{", "}}", "[[", "]]");
33 custom_engine2.set_variable("numbers", json!(["one", "two", "three"]));
34
35 let template = r#"
36[[ for num in numbers ]]
37+ {{ num }}
38[[ endfor ]]"#;
39
40 let result = custom_engine2.render_string(template)?;
41 println!("自定义标签测试2:{}", result);
42
43 println!("=== 测试完成 ===");
44 Ok(())
45}Additional examples can be found in:
Trait Implementations§
Auto Trait Implementations§
impl Freeze for TemplateEngine
impl RefUnwindSafe for TemplateEngine
impl Send for TemplateEngine
impl Sync for TemplateEngine
impl Unpin for TemplateEngine
impl UnwindSafe for TemplateEngine
Blanket Implementations§
§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more