准备工作:
先在项目根目录的Cargo.toml文件中添加依赖记录
[dependencies.askama] version = "0.11.1"
注意, 你的项目里面有src文件夹, 也应该在同级别新建一个名叫templates的文件夹, 用以放置.html视图。
在main.rs或者随便找个加载公共方法的文件引入一个公共结构体:
struct HtmlTemplate<T>(T);
impl<T> IntoResponse for HtmlTemplate<T>
where
T: Template,
{
fn into_response(self) -> Response {
match self.0.render() {
Ok(html) => Html(html).into_response(),
Err(err) => (
StatusCode::INTERNAL_SERVER_ERROR,
format!("渲染视图失败: {}", err), )
.into_response(),
}
}
}准备工作完成...

如何摆放视图变量和使用视图
在项目中找一个控制器文件,如果你的项目压根没有mvc的概念, 哪怕就一个main.rs, 也没关系, 定义一个结构体, 代码如下。
#[derive(Template)]
#[template(path = "somepage.html")]
struct TplSomepage {
title: String,
description: String,
company_name: String,
}根据编译器的提示, 结构体的命名写法有点要求, 不然报bug, 鄙人在这里命名为TplXxxXxx
那么在项目根目录下的templates文件夹底下你需要新建一个文件叫somepage.html, 就和上方的结构体关联上了。
接下来,在控制器里写一个方法(请原谅我mvc写惯了, 写rust也这个鸟味儿):
pub async fn hey_shit() -> impl IntoResponse {
let title = String::from("标题");
let description = String::from("描述");
let company_name = String::from("某某公司");
let template = TplSomepage {
title,
description,
company_name,
};
HtmlTemplate(template)
}至于视图变量的放置, 和之前处理python/php的视图类似:
{{ 变量名 }}