174 个版本 (50 个稳定版)

6.0.0 2024 年 7 月 20 日
5.1.2 2024 年 3 月 24 日
5.1.1 2024 年 1 月 18 日
5.0.0 2023 年 12 月 31 日
0.3.2 2014 年 12 月 31 日

模板引擎 中排名 1

Download history 266335/week @ 2024-05-03 286276/week @ 2024-05-10 306480/week @ 2024-05-17 308973/week @ 2024-05-24 318363/week @ 2024-05-31 325790/week @ 2024-06-07 300185/week @ 2024-06-14 311724/week @ 2024-06-21 288873/week @ 2024-06-28 283468/week @ 2024-07-05 286667/week @ 2024-07-12 296362/week @ 2024-07-19 303297/week @ 2024-07-26 286200/week @ 2024-08-02 334067/week @ 2024-08-09 344857/week @ 2024-08-16

每月下载量 1,327,167
用于 1,010 个 Crates (483 个直接使用)

MIT 许可证

340KB
8K SLoC

handlebars-rust

Handlebars 模板语言 在 Rust 中实现,并适用于 Rust。

CI Coverage Status MIT licensed Docs Donate

入门指南

快速开始

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 中说明。

文档

Rust 文档.

变更日志

变更日志可在源树中找到,名称为 CHANGELOG.md

贡献指南

欢迎任何对该库的贡献。要开始开发,我有一些 需要帮助 的问题,并标记了难度级别。遇到任何问题,请随时在 GitHub 上联系我。

我一直在寻找维护者来共同维护这个库,如果你想要加入,请通过电子邮件或在问题跟踪器中的任何地方告诉我。

为什么选择(这个)Handlebars?

Handlebars 是一个实际使用的模板系统,您可以使用它来构建应用程序而无需痛苦。

特性

Rust 和 HTML 的隔离

这个库不会尝试使用一些宏魔法来允许您在 Rust 代码中编写模板。我承认这样做很有趣,但它不适合现实世界的用例。

内置有限的但必要的控制结构

仅内置必要的控制指令 ifeach。这可以防止您将过多的应用程序逻辑放入模板中。

可扩展的助手系统

您可以使用 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 框架

采用者

采用者 页面列出了使用 handlebars 部分功能的项目。

扩展

扩展 页面有提供额外辅助工具、装饰器和输出的库,您可以在自己的项目中使用。

许可证

此库(handlebars-rust)是在 MIT 许可证下开源的。

依赖

~3–13MB
~143K SLoC