48 个版本

0.17.2 2024年6月30日
0.17.0 2023年7月22日
0.16.1 2023年1月28日
0.15.0 2022年9月18日
0.1.2 2016年11月20日

#21 in 模板引擎

Download history 213/week @ 2024-05-04 194/week @ 2024-05-11 261/week @ 2024-05-18 276/week @ 2024-05-25 427/week @ 2024-06-01 242/week @ 2024-06-08 293/week @ 2024-06-15 215/week @ 2024-06-22 296/week @ 2024-06-29 293/week @ 2024-07-06 208/week @ 2024-07-13 157/week @ 2024-07-20 550/week @ 2024-07-27 295/week @ 2024-08-03 264/week @ 2024-08-10 168/week @ 2024-08-17

1,302 每月下载量
7 软件包 中使用

MIT/Apache

105KB
2K SLoC

Rust 编译模板 — ructe

这是我为 Rust 编写 HTML 模板系统的尝试。一些灵感来自 play 2 中使用的 Scala 模板系统,以及普通的 jsp。

Crate docs CI

设计标准

  • 应尽可能在编译时捕获错误。
  • 编译的二进制文件应包含所有需要的模板代码,不需要在运行时读取模板文件。
  • 编译可能需要时间,运行应该快速。
  • 编写模板应该几乎和编写 HTML 一样简单。
  • 模板语言应该尽可能丰富。
  • 应该能够为任何文本格式编写模板,而不仅仅是 HTML。
  • 任何实现 Display 特质的值都应该可输出。
  • 默认情况下,所有值都应该是 HTML 转义。应该有一个简单但明确的方式来输出预格式化的 HTML。

当前状态

Ructes 处于相对早期阶段,但确实可以工作;模板可以被转换为 Rust 函数,然后编译并可以从 Rust 代码中调用。

模板格式

模板由三个基本部分组成:首先是一个以 use 语句为开头的前置声明,每个声明前都带有 @ 符号。其次是对模板参数的声明。最后是模板主体。

完整语法请参阅 文档。一些示例可以在 示例 中看到。一个模板可能看起来像这样

@use any::rust::Type;
@use super::statics::style_css;

@(name: &str, items: &[Type])

<html>
   <head>
     <title>@name</title>
     <link rel="stylesheet" href="/static/@style_css.name" type="text/css"/>
   </head>
   <body>
     <h1>@name</h1>
     <dl>
     @for item in items {
       <dt>@item.title()</dt>
       <dd>@item.description()</dd>
     }
     </dl>
   <body>
</html>

如何使用 ructe

Ructe 将您的模板编译成 Rust 代码,这些代码应该与您的其他 Rust 代码一起编译,因此在编译之前需要调用它,如 文档中所述。还有 示例,包括 ructe 本身及其未来版本,以及与 Web 框架一起使用的示例 axumactix-webgothamironnickeltide,以及 warp。还有一个使用 ructe 与 warp 和 diesel 的 独立示例

依赖项

~1.5–2.1MB
~41K SLoC