テンプレートエンジンの使用

Salvo にはデフォルトでテンプレートエンジンは組み込まれていません。どのスタイルのテンプレートエンジンを好むかは、人それぞれだからです。

テンプレートエンジンの本質は、データ + テンプレート = 文字列です。

したがって、最終的に文字列をレンダリングできれば、任意のテンプレートエンジンをサポートできます。

例えば、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;
}

注意: 特に複雑なプロジェクトでない場合は、フロントエンドとバックエンドを分離した開発方法を推奨します。より柔軟でエコシステムが豊富なUIフレームワーク(React、Vue、Svelteなど)を使用してフロントエンドを構築し、SalvoをバックエンドAPIサービスとして利用します。この方法では開発効率が高く、フロントエンドとバックエンドの責務が明確になり、現代的なWebアプリケーション開発のトレンドにも合致します。