Horrorshow
A macro-based html templating library (1.0 compatible).
Documentation: https://stebalien.github.io/horrorshow-rs/horrorshow/
Example:
# #[macro_use] extern crate horrorshow;
# fn main() {
use horrorshow::prelude::*;
let actual = 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") {
// run some inline code...
|mut tmpl| for i in 0..10 {
// append to the current template.
// store output because rust bug #25753
tmpl = tmpl << html! {
li {
// format some text
#{"{}", i+1 }
}
};
}
}
// You need semi-colons for tags without children.
br; br;
p {
: "Easy!"
}
}
}
}.into_string();
let expected = "\
<html>\
<head>\
<title>Hello world!</title>\
</head>\
<body>\
<h1 id=\"heading\">Hello! This is <html /></h1>\
<p>Let's <i>count</i> to 10!</p>\
<ol id=\"count\">\
<li>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);
# }