12个版本 (6个重大变更)
使用旧的Rust 2015
0.9.0 | 2018年2月12日 |
---|---|
0.8.2 | 2017年10月11日 |
0.8.1 | 2017年8月3日 |
0.8.0 | 2016年11月14日 |
0.4.0 | 2014年12月14日 |
#67 in 模板引擎
37,591 每月下载量
在 74 个crate中使用了(直接使用30个)
77KB
2K SLoC
Mustache
受ctemplate和et启发,Mustache是一个不依赖于框架的渲染无逻辑视图的方法。
正如ctemplate所说,“它强调逻辑与展示的分离:在这个模板语言中不可能嵌入应用程序逻辑。”
rust-mustache是Mustache的Rust实现。
文档
不同Mustache标签的文档在mustache(5)。
本库的文档在这里:here。
安装
通过Cargo安装!
[dependencies]
mustache = "*"
基本示例
#[macro_use]
extern crate serde_derive;
extern crate mustache;
use std::io;
use mustache::MapBuilder;
#[derive(Serialize)]
struct Planet {
name: String,
}
fn main() {
// First the string needs to be compiled.
let template = mustache::compile_str("hello {{name}}").unwrap();
// You can either use an encodable type to print "hello Mercury".
let planet = Planet { name: "Mercury".into() };
template.render(&mut io::stdout(), &planet).unwrap();
println!("");
// ... or you can use a builder to print "hello Venus".
let data = MapBuilder::new()
.insert_str("name", "Venus")
.build();
template.render_data(&mut io::stdout(), &data).unwrap();
println!("");
// ... you can even use closures.
let mut planets = vec!("Jupiter", "Mars", "Earth");
let data = MapBuilder::new()
.insert_fn("name", move |_| {
planets.pop().unwrap().into()
})
.build();
// prints "hello Earth"
template.render_data(&mut io::stdout(), &data).unwrap();
println!("");
// prints "hello Mars"
template.render_data(&mut io::stdout(), &data).unwrap();
println!("");
// prints "hello Jupiter"
template.render_data(&mut io::stdout(), &data).unwrap();
println!("");
}
测试
简单克隆并运行
# If you want to run the test cases, you'll need the spec as well.
git submodule init
git submodule update
cargo test
# If you want to test the readme example, we're currently using the unstable feature to do so.
cargo +nightly test --features unstable
许可协议
见LICENSE文件
依赖关系
~270–520KB
~11K SLoC