Selmerを使ってみる

Hiccupにどうしても慣れることができなかったので、Djangoにインスパイアされたと言われるSelmerがどんなものか軽く動かしてみることにした。

project.cljの:dependenciesに以下を追加

[selmer "1.0.7"]

resource/templates配下に

  • layout.html
  • user/login.html

を用意

<!-- resource/templates/layout.html -->
<html lang="ja">
  <head>
    <title>title</title>
  </head>
  <body>
    {% block body %}{% endblock %}
  </body>
</html>
<!-- resource/templates/user/login.html -->
{% extends "layout.html" %}
{% block body %}
<form action="/login" method="post">
  <div><input type="text" name="email" value="{{email}}"/></div>
  <div><input type="password" name="password" value="{{password}}"/></div>
  <div><input type="submit" value="submit"/></div>
</form>
{% endblock %}

画面表示用の関数でrender-file を使ってテンプレートの呼び出しとコンテキストの設定

; core.clj
(ns selmer-example.core
  (:require ...省略...)
  (:use [selmer.parser :refer [render-file set-resource-path!]]))
; project.cljの:resource-paths に resourcesが指定されている必要がある
(set-resource-path! (clojure.java.io/resource "templates"))

(defn login-view
  [{email :email password :password :as params}]
  (println params)
  (render-file "user/login.html" {:email email :password password}))

...省略....

すんなり動いてくれた。これなら十分実用できそうな気がする。