#template #html #markup #jinja2 #jinja #compile-time

askama

类型安全的编译型Jinja-like模板,适用于Rust

31个版本

0.12.1 2023年9月29日
0.12.0 2023年3月6日
0.11.1 2022年2月16日
0.11.0 2021年12月21日
0.3.2 2017年3月12日

#4模板引擎 分类中

Download history 96470/week @ 2024-04-23 90698/week @ 2024-04-30 90095/week @ 2024-05-07 94855/week @ 2024-05-14 94539/week @ 2024-05-21 104789/week @ 2024-05-28 100382/week @ 2024-06-04 111542/week @ 2024-06-11 101666/week @ 2024-06-18 99069/week @ 2024-06-25 96251/week @ 2024-07-02 98451/week @ 2024-07-09 99599/week @ 2024-07-16 96545/week @ 2024-07-23 89959/week @ 2024-07-30 95183/week @ 2024-08-06

397,330 每月下载量
273 个crate中(168直接使用) 中使用

MIT/Apache

65KB
1K SLoC

Askama

Documentation Latest version Build Status Chat

Askama实现了一个基于Jinja的模板渲染引擎。它根据用户定义的用于存储模板上下文的struct在编译时生成Rust代码。下面是一个示例,或者阅读这本书

"非常令人兴奋。我非常希望现在就能使用它。" -- Armin Ronacher,Jinja的创造者

欢迎所有反馈。请随意在问题跟踪器推文中提交错误、对文档的请求或其他反馈。

Askama由Dirkjan Ochtman创建并维护。如果您能够支持持续维护和进一步开发,或者在使用盈利环境中使用它,请考虑支持我在Patreon上的开源工作。

特性亮点

  • 使用熟悉、易于使用的语法构建模板
  • 受益于Rust类型系统提供的安全性
  • 模板代码编译到您的crate中,以获得最佳性能
  • 可选的内置对Actix、Axum、Gotham、Mendes、Rocket、tide和warp Web框架的支持
  • 调试功能,帮助您进行模板开发
  • 模板必须是有效的UTF-8,并且在渲染时产生UTF-8
  • JetBrains产品中提供IDE支持
  • 在稳定版Rust上运行

支持在模板中使用

  • 模板继承
  • 循环、if/else语句和包含支持
  • 宏支持
  • 变量(不允许可变性)
  • 一些内置过滤器,以及使用您自己的能力
  • 使用'-'标记抑制空白
  • 可选退出HTML转义
  • 语法定制

如何开始

首先,将Askama依赖项添加到您的crate的Cargo.toml

cargo add askama

现在在您的crate根目录下创建一个名为templates的目录。在其中,创建一个名为hello.html的文件,包含以下内容

Hello, {{ name }}!

在您的crate中的任何Rust文件中,添加以下内容

use askama::Template; // bring trait in scope

#[derive(Template)] // this will generate the code...
#[template(path = "hello.html")] // using the template in this path, relative
                                 // to the `templates` dir in the crate root
struct HelloTemplate<'a> { // the name of the struct can be anything
    name: &'a str, // the field name should match the variable name
                   // in your template
}

fn main() {
    let hello = HelloTemplate { name: "world" }; // instantiate your struct
    println!("{}", hello.render().unwrap()); // then render it.
}

现在您应该能够编译并运行此代码。

查看测试用例以获取更多示例。

依赖关系

~1.4–3.5MB
~77K SLoC