4 个版本 (2 个重大更新)
0.3.0 | 2020 年 10 月 21 日 |
---|---|
0.2.0 | 2020 年 2 月 16 日 |
0.1.4 | 2020 年 2 月 15 日 |
0.1.3 | 2019 年 3 月 29 日 |
在 模板引擎 中排名第 471
每月下载量 97
在 5 个 Crates 中使用(3 个直接使用)
25KB
608 行代码(不包括注释)
t4rust
关于
t4rust 是一个简单的模板引擎,灵感来源于 T4 语法。
示例
创建模板的简单示例。
use t4rust_derive::Template;
// Add this attribute to use a template
#[derive(Template)]
// Specify the path to the template file here
#[TemplatePath = "./examples/doc_example1.tt"]
// Add this attribute if you want to get debug parsing information
// This also enables writing temporary files, you might get better error messages.
//#[TemplateDebug]
struct Example {
// Add fields to the struct you want to use in the template
name: String,
food: String,
num: i32,
}
fn main() {
// Generate your template by formating it.
let result = format!("{}", Example { name: "Splamy".into(), food: "Cake".into(), num: 3 });
println!("{}", result);
}
doc_example1.tt
:
Hello From Template!
My Name is: <# write!(_fmt, "{}", self.name)?; #>
I like to eat <#= self.food #>.
<# for num in 0..self.num { #>Num:<#= num + 1 #>
<# } #>
输出
Hello From Template!
My Name is: Splamy
I like to eat Cake.
Num:1
Num:2
Num:3
语法
您可以在代码块中简单地编写 Rust 代码。
代码在 <#
和 #>
块中编写。如果您想在模板文本中编写一个 <#
而不开始一个代码块,只需写两次:<#<#
。同样的规则也适用于代码块中的 #>
。您不需要在代码块中重复编写 <#
,也不需要在模板文本块中重复编写 #>
。
您可以使用 <#= expr #>
来打印单个表达式。
你可能注意到了模板中的神奇变量 _fmt
。这个变量让你可以访问格式化器,例如,它允许你在模板中编写函数。<# write!(_fmt, "{}", self.name)?; #>
等于 <#= self.name #>
。
警告:请确保永远不要创建名为 _fmt
的变量!你将遇到奇怪的编译器错误。
特性
自动转义
在您的 .tt 文件中使用 escape
指令
<#@ escape function="escape_html" #>`
并在您的代码中创建具有此签名的函数
fn escape_html(s: &str) -> String {
todo!(); /* Your escaping code here */
}
所有表达式块(例如 <#= self.name #>
)在插入之前都会调用转义函数。
您可以在模板的任何位置多次重新声明此指令来更改或禁用(使用 function=""
)转义函数。
许可
在以下任一许可下授权
由您选择。
依赖项
~2.5MB
~52K SLoC