Real-world Clojure templating, seriously. Don't talk about enlive or hiccup on a clojure web development book any more.
- Never ruin your Clojure code with HTML
- Never ruin your HTML code with Clojure
- Templating without reuse mechanism is shit
- Templating without customization is nothing but shit
What handlebars has?
- Separate your Clojure and HTML, calm down both
- Reuse your handlebars template with include, partial and block
- Create your own helpers for your infinite customization needs
This library is based on handlebars.java.
(use '[hbs.core])
;; render something from template string
(render "foo {{foo}}" {:foo "bar"})
;; configure where to load template file:
(set-template-path! "templates" ".html")
;; OR load templates from a remote URL (defaults to .hbs files):
(set-template-url! "http://example.com/templates/")
;; render something from templates/index.html
(render-file "index" {:foo "bar"})
hbs library provides a default ring middleware
hbs.core/wrap-handlebars-template
to generate pages from standard
response: {:hbs {:template ... :context ...}}
;; ring handler function that generate handlebars response
(defn some-handler [req]
;;...
{:hbs {:template "index"
:context {:a "A" :b "B"}}})
By default, hbs middleware use text/html; charset=utf-8
as content
type. You can override it by setting {:headers {"Content-Type" ...}}
explicitly in your response.
Handlebars is nothing without helpers.
(use '[hbs core helper])
(defhelper mytag [ctx options]
(safe-str "HelloWorld, " (clojure.string/upper ctx)))
(render "{{mytag foo}}" {:foo "bar"})
Helpers can also be defined using javascript. Javascript helpers are registered using register-js-helpers!-function
(register-js-helpers! "path/to/file.js")
I have some predefined helpers used in my projects. And I decide to ship it in the release.
To use these helpers, be sure eval hbs.ext
. You can
just add a (:require [hbs.ext])
on you core namespace.
Available helpers:
- ifequals
- ifgreater
- ifless
- ifcontains
- uppercase
- lowercase
- or
- count
- format-date
- format
- ifempty
- max
- min
Handlebars implemented for Rust language: handlebars-rust.
Copyright © 2013-2015 Sun Ning
Distributed under the Eclipse Public License, the same as Clojure.