#template #web-framework #markup #jinja2 #html

askama_web

A compatibility add-on for Askama to support many different web frameworks

1 unstable release

new 0.0.1-pre.0 Feb 21, 2025

#106 in Template engine

MIT/Apache

28KB
320 lines

askama_web

GitHub Workflow Status Crates.io docs.rs

A compatibility add-on for askama to support many different web frameworks.

Example

E.g. if you are using axum, then add askama_web with the feature "axum-0.8" to your Cargo.toml:

[dependencies]
askama_web = { version = "0.0.1-pre.0", features = ["axum-0.8"] }

Then just add #[derive(WebTemplate)] to your Askama templated struct or enum:

use askama::Template;
use askama_web::WebTemplate;
use axum::Router;
use axum::routing::get;

#[derive(Template, WebTemplate)]
#[template(path = "hello.html")]
struct HelloTemplate {
    name: String,
}

async fn hello() -> HelloTemplate {
    HelloTemplate {
        name: "world".to_string(),
    }
}

let app = Router::new().route("/", get(hello));

By selecting the feature "axum-0.8", HelloTemplate will implement axum::response::IntoResponse. The user will receive a "Status: 200", "Content-Type: text/html; charset=utf-8" response with the rendered struct as body.

Feature flags / web framework selection

These web frameworks are currently implemented and can be selected with their respective feature flag:

  • "actix-web-4": actix-web in version 4.x.y
  • "axum-0.8": axum in version 0.8.y
  • "poem-3": poem in version 3.x.y
  • "rocket-0.5": rocket in version 0.5.y
  • "warp-0.3": warp in version 0.3.y

As well as these logging / debugging facilities to print error message if a template could not be rendered:

  • "eprintln": using rust's built-in eprintln!() macro
  • "log-0.4": using log as logging framework
  • "tracing-0.1": using tracing as logging framework

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~1–34MB
~524K SLoC