7个版本

0.3.0 2019年10月4日
0.2.6 2019年7月29日
0.2.3 2019年6月12日
0.1.0 2019年5月23日

#211模板引擎

每月37次下载

MIT许可协议

21KB
294

erst

Docs Crates.io

一个用于创建字符串模板的小型库,类似于eRubyJSP(使用尖括号百分号标签:<%= expr %>)。

模板已预编译以提高速度和安全性,但在启用dynamic标志时提供部分动态渲染(需要一些设置)。

使用方法

use erst::Template;

#[derive(Template)]
#[template(path = "simple.erst", type = "html")]
pub struct Container<'a> {
    pub collection: Vec<&'a str>,
}

fn main() {
    println!("{}", Container { collection: vec!["Hello", "<>", "World"] });
}

simple.erst看起来像

<div>
    <p>Hello!</p>
    <%
        let desc = format!("Here is your list of {} items:", self.collection.len());
    -%>
    <p><%= desc %></p>
    <ul>
        <% for x in &self.collection { -%>
            <li><%= x %></li>
        <%- } %>
    </ul>
</div>

默认情况下,模板的path将解析到当前项目上下文中templates目录内的文件(即,CARGO_MANIFEST_DIR)。如果您需要更改此设置,可以将ERST_TEMPLATES_DIR环境变量设置为适当的路径。请注意,这仅在构建时才是问题;由于模板已编译到您的二进制文件中,因此运行编译的二进制文件时不需要此结构/环境变量。

请注意,与Askama和其他许多模板系统不同,您需要在模板文件中使用self引用您的Template项的任何成员。模板文件基本上是一个函数的主体,该函数接受&self(其中self是链接的Container对象)。

请注意,与Askama和其他预编译模板系统一样,您可以引用您的crate中可用的任何项(结构、函数等)。

目前,仅支持html类型(或无类型),提供非常基本的HTML转义。要在模板文件中转义HTML内容,请将内容包装在Raw中,例如。

erst::Raw("<p>Hello</p>")

动态

此库还提供了一种避免(重新)编译模板的静态/非Rust部分的方法。

要启用此功能,请在您的Cargo.toml中添加以下内容

[dependencies]
erst = { version = "0.2", features = ["dynamic"] }

[build-dependencies]
erst = { version = "0.2", features = ["dynamic"] }

您还必须安装一个辅助二进制文件,erst-prepare

cargo install erst-prepare

erst-prepare 是一个小型二进制程序,它将模板中的代码部分复制到 $XDG_CACHE_HOME,以便构建脚本可以在模板代码部分更改时重新运行。

然后像这样运行您的项目

erst-prepare && cargo run

如果您有一个独特的配置,可能需要使用 --pkg-name--templates-dir 标志来运行 erst-prepare

erst-prepare --pkg-name my-project --templates-dir /path/to/your/templates/dir

如果您使用 dynamic 且在构建前没有运行 erst-prepare,则模板可能无法正确渲染。

当前版本:0.3.0

许可:MIT

依赖项

~7.5MB
~146K SLoC