Web开发中要常用模版来特定化页面的输出。Golang的标准库还包括HTML和纯文本模板包html/template和text/template。在Rust中有很多用于HTML模板化的解决方案,比如ructe板条箱。ructe使用Cargo的build.rs功能在编译时为其模板生成Rust代码。这样就可以将HTML模板编译成结果应用程序二进制文件,从而以惊人的速度呈现它们。
添加Cargo.toml:
[build-dependencies] ructe = { version = "0.12", features = ["warp02"] } 还依赖mime板条箱: [dependencies] mime = "0.3.0"完成此操作后,templates在当前工作目录中创建一个新文件夹。创建一个名为的文件hello.rs.html,并将以下内容放入其中:
@(title: String, message: String) <html> <head> <title>@title</title> </head> <body> <h1>@title</h1> <p>@message</p> </body> </html>然后使用模板templates.rs:
use warp::{http::Response, Filter, Rejection, Reply}; async fn hello_html(message: String) -> Result<impl Reply, Rejection> { Response::builder() .html(|o| templates::index_html(o, "Hello".to_string(), message).unwrap().clone())) }在src/main.rs底部,通过以下语句引入模版定义:
include!(concat!(env!("OUT_DIR"), "/templates.rs"));在main()函数中调用:
let hello_html_rt = warp::path!("hello" / "html" / String) .and_then(hello_html); let routes = hello_html_rt.or(health).or(hello);