Verwendung von Template-Engines

Salvo bietet keine integrierte Template-Engine, da die Vorlieben für bestimmte Template-Stile individuell unterschiedlich sind.

Im Wesentlichen funktioniert eine Template-Engine nach dem Prinzip: Daten + Vorlage = Zeichenkette.

Daher kann jede beliebige Template-Engine unterstützt werden, solange sie letztendlich eine Zeichenkette rendern kann.

Ein Beispiel für die Unterstützung von 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;
}

Hinweis: Für nicht besonders komplexe Projekte empfehlen wir eher einen Ansatz mit getrennter Frontend- und Backend-Entwicklung. Dabei kommen flexiblere und besser etablierte UI-Frameworks (wie React, Vue, Svelte etc.) für das Frontend zum Einsatz, während Salvo als Backend-API dient. Diese Methode bietet höhere Entwicklungseffizienz, klarere Verantwortungsbereiche und entspricht eher den modernen Trends in der Webentwicklung.