Uso de motores de plantillas

Salvo no incluye ningún motor de plantillas integrado, ya que las preferencias por un estilo u otro de motor de plantillas varían según cada persona.

En esencia, un motor de plantillas es: datos + plantilla = cadena de texto.

Por lo tanto, cualquier motor de plantillas que pueda renderizar la cadena final es compatible.

Por ejemplo, el soporte para askama:

main.rs
Cargo.toml
template/hello.toml
template-askama/src/main.rs
use askama::Template;
use salvo::prelude::*;

#[derive(Template)]
#[template(path = "hello.html")]
struct HelloTemplate<'a> {
name: &'a str,
}

#[handler]
async fn hello(req: &mut Request, res: &mut Response) {
let hello_tmpl = HelloTemplate {
    name: req.param::<&str>("name").unwrap_or("World"),
};
res.render(Text::Html(hello_tmpl.render().unwrap()));
}

#[tokio::main]
async fn main() {
tracing_subscriber::fmt().init();

let router = Router::with_path("{name}").get(hello);
let acceptor = TcpListener::new("0.0.0.0:5800").bind().await;
Server::new(acceptor).serve(router).await;
}

Nota: Para proyectos no excesivamente complejos, recomendamos encarecidamente adoptar un enfoque de desarrollo con separación entre frontend y backend. Utilice frameworks UI más flexibles y con mejor ecosistema (como React, Vue, Svelte, etc.) para construir el frontend, mientras Salvo actúa como servicio API backend. Este método ofrece mayor eficiencia en el desarrollo, una clara delimitación de responsabilidades entre frontend y backend, y se alinea mejor con las tendencias actuales de desarrollo de aplicaciones web.