Crate iron_tera [] [src]

Examples

extern crate iron_tera;
use iron_tera::{TeraEngine, Template, TemplateMode};

fn main() {
    let mut router = Router::new();
    router.get("/user", user_handler, "user");

    let mut chain = Chain::new(router);
    // TeraEngine will panic here if parsing fails, it's part of the Tera library
    let teng = TeraEngine::new("src/examples/templates/**/*");
    chain.link_after(teng);

    Iron::new(chain).http("localhost:5000").unwrap();
}
// Rendering a template from a context.
fn user_handler(_: &mut Request) -> IronResult<Response> {
    let mut resp = Response::new();

    let mut context = Context::new();
    context.add("username", &"Bob");
    context.add("numbers", &vec![1, 2, 3]);
    context.add("bio", &"<script>alert('pwnd');</script>");

    resp.set_mut(Template::new("users/profile.html", TemplateMode::from_context(context)))
        .set_mut(status::Ok);
    Ok(resp)
}
// The following uses serde's Serialize
#[derive(Serialize)]
struct Product {
    name: String,
    value: i32,
}
// Rendering from a struct that implements Serialize
fn produce_handler(_: &mut Request) -> IronResult<Response> {
    let mut resp = Response::new();

    // Using serialized values
    let product = Product {
        name: "Foo".into(),
        value: 42,
    };
    resp.set_mut(Template::new("product.html", TemplateMode::from_serial(&product)))
        .set_mut(status::Ok);
    Ok(resp)
}

Structs

Template

Our template holds a name (path to template) and a mode (constructed with from_context or from_serial)

TeraEngine

TeraEngine holds the Tera struct so that it can be used by many handlers without explicitly passing

Enums

TemplateMode

There are 2 main ways to pass data to generate a template.