Uso de Motores de Plantillas

Salvo no incluye ningún motor de plantillas integrado, ya que las preferencias por estilos de motores de plantillas varían de persona a persona.

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

Por lo tanto, siempre que se pueda renderizar la cadena final, se puede admitir cualquier motor de plantillas.

Por ejemplo, soporte para askama:

main.rs
Cargo.toml
templates/hello.html
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:8698").bind().await;
    Server::new(acceptor).serve(router).await;
}

Nota: Para proyectos que no sean particularmente complejos, recomendamos encarecidamente adoptar un enfoque de separación entre frontend y backend. Utilice marcos de trabajo de interfaz de usuario más flexibles y con ecosistemas más ricos (como React, Vue, Svelte, etc.) para construir el frontend, mientras que Salvo actúa como el servicio de API del backend. Este enfoque conduce a una mayor eficiencia de desarrollo, responsabilidades más claras entre frontend y backend, y se alinea mejor con las tendencias modernas de desarrollo de aplicaciones web.