你可以按照以下方式修改你的代码来解决这个问题:
use actix_web::{web, App, HttpResponse, HttpServer, Responder};
use tera::Tera;
use actix_web::web::Data;
async fn index(tera: Data) -> impl Responder {
let mut context = tera::Context::new();
context.insert("name", "World");
let rendered = tera.render("index.html", &context).unwrap();
HttpResponse::Ok().body(rendered)
}
#[actix_web::main]
async fn main() -> std::io::Result<()> {
let tera = Tera::new("templates/**/*").unwrap();
HttpServer::new(move || {
App::new()
.data(Data::new(tera.clone())) // 使用 Data::new() 包装数据
.route("/", web::get().to(index))
})
.bind("127.0.0.1:8080")?
.run()
.await
}
在上面的代码中,我们使用了Data::new()
来包装Tera
模板引擎,并将其作为数据传递给index
处理程序。这样,在index
函数中就可以通过tera.into_inner()
来获取Tera
实例了。