174 个版本 (50 个稳定版)
6.0.0 | 2024 年 7 月 20 日 |
---|---|
5.1.2 | 2024 年 3 月 24 日 |
5.1.1 |
|
5.0.0 | 2023 年 12 月 31 日 |
0.3.2 | 2014 年 12 月 31 日 |
在 模板引擎 中排名 1
每月下载量 1,327,167
用于 1,010 个 Crates (483 个直接使用)
340KB
8K SLoC
handlebars-rust
Handlebars 模板语言 在 Rust 中实现,并适用于 Rust。
入门指南
快速开始
use handlebars::Handlebars;
use serde_json::json;
use std::error::Error;
fn main() -> Result<(), Box<dyn Error>> {
let mut reg = Handlebars::new();
// render without register
println!(
"{}",
reg.render_template("Hello {{name}}", &json!({"name": "foo"}))?
);
// register template using given name
reg.register_template_string("tpl_1", "Good afternoon, {{name}}")?;
println!("{}", reg.render("tpl_1", &json!({"name": "foo"}))?);
Ok(())
}
代码示例
如果您不熟悉 handlebars 语言语法,建议先阅读他们的介绍。
源代码树中提供了示例,以演示各种 API 的使用。
- quick 注册和渲染 API 的基本示例
- render 如何使用函数、特性和宏定义自定义助手,以及如何使用自定义助手
- render_file 与 render 类似,但将渲染到文件而不是字符串
- helper_macro 使用
handlebars_helper!
来简化助手开发 - partials 使用 handlebars 进行模板继承
- decorator 如何使用装饰器更改数据或定义自定义助手
- script 如何使用 rhai 脚本语言定义自定义助手,就像使用 JavaScript 为 handlebarsjs 编写一样
- error 错误的简单示例
- dev_mode 一个 Web 服务器在
dev_mode
中托管 handlebars,您可以在不重启服务器的情况下编辑模板并查看更改。
Web 演示平台
我们使用 GitHub Action 将最新的 master
分支编译成 WebAssembly,并在 GitHub Pages 上提供服务。您可以使用 handlebars-rust 和 handlebarjs 测试和验证您的模板。
最低 Rust 版本政策
Handlebars 将跟踪 Rust 夜间和稳定通道。当停止支持之前的稳定版本时,我将增加 修补 版本并在 CHANGELOG 中说明。
文档
变更日志
变更日志可在源树中找到,名称为 CHANGELOG.md
。
贡献指南
欢迎任何对该库的贡献。要开始开发,我有一些 需要帮助 的问题,并标记了难度级别。遇到任何问题,请随时在 GitHub 上联系我。
我一直在寻找维护者来共同维护这个库,如果你想要加入,请通过电子邮件或在问题跟踪器中的任何地方告诉我。
为什么选择(这个)Handlebars?
Handlebars 是一个实际使用的模板系统,您可以使用它来构建应用程序而无需痛苦。
特性
Rust 和 HTML 的隔离
这个库不会尝试使用一些宏魔法来允许您在 Rust 代码中编写模板。我承认这样做很有趣,但它不适合现实世界的用例。
内置有限的但必要的控制结构
仅内置必要的控制指令 if
和 each
。这可以防止您将过多的应用程序逻辑放入模板中。
可扩展的助手系统
您可以使用 Rust 编写自己的助手!它可以是一个块助手或内联助手。将您的逻辑放入助手,避免重复。
助手可以像 Rust 函数一样简单
handlebars_helper!(hex: |v: i64| format!("0x{:x}", v));
/// register the helper
handlebars.register_helper("hex", Box::new(hex));
并在您的模板中使用它
{{hex 16}}
默认情况下,handlebars-rust 与原始 js 版本相比,提供了 额外的助手(当使用 if
时非常有用)。
启用 script_helper
功能标志后,您还可以使用 rhai 脚本创建助手,就像 handlebars-js 中的 JavaScript 一样。这个功能还处于早期阶段。目前其 API 有限,未来可能会有所变化。
模板继承
每次我研究一个模板系统时,我都会调查其对 模板继承 的支持。
模板包含不足以实现模板重用。在大多数情况下,您需要一个页面框架(例如标题、页脚等)作为父级,并将页面嵌入到这个父级中。
您可以在 examples/partials.rs
中找到一个模板继承的实例,以及该文件使用的模板。
开发模式下的自动重新加载
通过开启 dev_mode
,handlebars 将自动重新加载从文件或目录加载的任何模板和脚本。这对于模板开发非常有用。
与 WebAssembly 兼容
Handlebars 3.0 可以用于 WebAssembly 项目。
完全可脚本化
通过 rhai 脚本支持,您可以使用脚本语言实现自己的助手。结合模板语言本身,模板开发可以完全脚本化,而无需更改 Rust 代码。
相关项目
Web 框架
- Iron: handlebars-iron
- Rocket: rocket/contrib
- Warp: handlebars 示例
- Tower-web: 内置
- Actix: handlebars 示例
- Tide: tide-handlebars
- Axum: axum-template
采用者
采用者 页面列出了使用 handlebars 部分功能的项目。
扩展
扩展 页面有提供额外辅助工具、装饰器和输出的库,您可以在自己的项目中使用。
许可证
此库(handlebars-rust)是在 MIT 许可证下开源的。
依赖
~3–13MB
~143K SLoC