#html #template

horrorshow

a templating library written in rust macros

23 releases

✓ Uses Rust 2018 edition

0.7.0 Aug 28, 2019
0.6.6 Mar 16, 2019
0.6.5 Jan 20, 2019
0.6.4 Jun 27, 2018
0.5.2 Jun 26, 2015

#7 in Template engine

Download history 31/week @ 2019-07-15 49/week @ 2019-07-22 61/week @ 2019-07-29 57/week @ 2019-08-05 84/week @ 2019-08-12 37/week @ 2019-08-19 282/week @ 2019-08-26 154/week @ 2019-09-02 89/week @ 2019-09-09 101/week @ 2019-09-16 127/week @ 2019-09-23 150/week @ 2019-09-30 72/week @ 2019-10-07 82/week @ 2019-10-14 128/week @ 2019-10-21

454 downloads per month
Used in 11 crates (8 directly)

MIT/Apache

56KB
1K SLoC

Horrorshow

Build Status

A macro-based html templating library, compatible with stable rust (currently requires rust >= 1.30).

Documentation

Example:

#[macro_use]
extern crate horrorshow;
use horrorshow::prelude::*;
use horrorshow::helper::doctype;

fn main() {
    let actual = format!("{}", html! {
        : doctype::HTML;
        html {
            head {
                title : "Hello world!";
            }
            body {
                // attributes
                h1(id="heading") {
                    // Insert escaped text
                    : "Hello! This is <html />"
                }
                p {
                    // Insert raw text (unescaped)
                    : Raw("Let's <i>count</i> to 10!")
                }
                ol(id="count") {
                    // You can embed for loops, while loops, and if statements.
                    @ for i in 0..10 {
                        li(first? = (i == 0)) {
                            // Format some text.
                            : format_args!("{}", i+1)
                        }
                    }
                }
                // You need semi-colons for tags without children.
                br; br;
                p {
                    // You can also embed closures.
                    |tmpl| {
                        tmpl << "Easy!";
                    }
                }
            }
        }
    });

    let expected = "\
    <!DOCTYPE html>\
    <html>\
      <head>\
        <title>Hello world!</title>\
      </head>\
      <body>\
        <h1 id=\"heading\">Hello! This is &lt;html /&gt;</h1>\
        <p>Let's <i>count</i> to 10!</p>\
        <ol id=\"count\">\
          <li first>1</li>\
          <li>2</li>\
          <li>3</li>\
          <li>4</li>\
          <li>5</li>\
          <li>6</li>\
          <li>7</li>\
          <li>8</li>\
          <li>9</li>\
          <li>10</li>\
        </ol>\
        <br /><br />\
        <p>Easy!</p>\
      </body>\
    </html>";
    assert_eq!(expected, actual);
}

No runtime deps