Rust templating with Handlebars.
Thanks to @blaenk's patch, handlebars-rust now compiles on nightly, beta and 1.0 channel.
Check examples in the source. The example shows you how to:
- Create a
Handlebars
and register the template from files - Create a custom Helper with closure or struct implementing
HelperDef
, and register it - Render something
Run cargo run --example render
to see results.
(or RUST_LOG=INFO cargo run --example render
) for logging output.
Checkout examples/
for more concrete demos of current API.
For information about handlebars, you will go to handlebars.js.
It's my favorite templating tool by far. I used it in Delicious.com as javascript-side template in 2013. Also I maintained a Clojure wrapper for Handlebars.java, hbs. And you may notice the close relationship between Ember.js and Rust community, handlebars is the default templating language of Ember.js framework, which powers crates.io.
Reasons I prefer Handlebars:
- Never ruin your Rust with HTML
- Never ruin your HTML with Rust
- Templating without a reuse mechanism is shit
- Templating without customization is nothing but shit
Handlebars provides:
- Separation of Rust and HTML
- A few control structures makes templating easier
- Few control structures stops you to put logic into templates
- Template reuse with include(
>
),partial
andblock
- Customize template behavior with helpers
Limitations:
- As a static typed language, it's a little verbose to use handlebars
- You will have to make your data
ToJson
-able, so we can render it. If you are on nightly channel, we have a syntax extension to generate defaultToJson
implementation for you.
- Expression / Block Helpers
- Built-in helpers
- Customizing helper
- Parameter and hashes for helper
- Partials, include
- Omitting whitespace with
~
- Subexpression
{{(foo bar)}}
Feel free to report an issue if you find something broken. We aren't going to implement all features of handlebars-js, but we should have a workaround for cases we don't support.
I have started another project handlebars-iron for the Iron web framework.
MIT, of course.