TemplateEngine

Struct TemplateEngine 

Source
pub struct TemplateEngine { /* private fields */ }
Expand description

模板引擎结构体

Implementations§

Source§

impl TemplateEngine

Source

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
Hide additional 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}
Source

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}
Source

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}
Source

pub fn set_template_dir<P: AsRef<Path>>(&mut self, path: P) -> &mut Self

设置模板目录

Source

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
Hide additional 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}
Source

pub fn set_variables(&mut self, vars: HashMap<String, Value>) -> &mut Self

批量设置变量

Source

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
Hide additional 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}
Source

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
Hide additional 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}
Source

pub fn render_file<P: AsRef<Path>>(&self, template_path: P) -> Result<String>

渲染模板文件

Trait Implementations§

Source§

impl Default for TemplateEngine

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more