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 模板引擎
1,302 每月下载量
在 7 软件包 中使用
105KB
2K SLoC
Rust 编译模板 — ructe
这是我为 Rust 编写 HTML 模板系统的尝试。一些灵感来自 play 2 中使用的 Scala 模板系统,以及普通的 jsp。
设计标准
- 应尽可能在编译时捕获错误。
- 编译的二进制文件应包含所有需要的模板代码,不需要在运行时读取模板文件。
- 编译可能需要时间,运行应该快速。
- 编写模板应该几乎和编写 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 框架一起使用的示例 axum,actix-web,gotham,iron,nickel,tide,以及 warp。还有一个使用 ructe 与 warp 和 diesel 的 独立示例。
依赖项
~1.5–2.1MB
~41K SLoC