Hatena::ブログ(Diary)

すにぺっと

2011-05-01

clojureプログラミング入門-34 compojureとenlive

| 09:17 | clojureプログラミング入門-34 compojureとenliveを含むブックマーク

前回hiccupをつかってみた。

HTMLファイルなしでcljだけでつくるのがいいのかなぁと

twitterでいったところ、enliveとかのテンプレートエンジンつかえるよと

@omasanori氏より返信いただいたので、ためしてみた。


enlive

https://github.com/cgrand/enlive/wiki/getting-started

チュートリアルもある

https://github.com/swannodette/enlive-tutorial


enliveの特徴としては、

静的なHTMLファイルを読み込んで、

各エレメントをclojureのマップに展開し、

jQueryみたいに要素を指定して置き換えしたり

できるみたい。


またいままでのサンプルを元に試す。

まずproject.cljを修正

(defproject comp "1.0.0-SNAPSHOT"
  :description "A Compojure 'Hello World' application"
  :dependencies [[org.clojure/clojure "1.2.0"]
                 [org.clojure/clojure-contrib "1.2.0"]
                 [compojure "0.6.2"]
				 [enlive "1.0.0-SNAPSHOT"]
				 [hiccup "0.3.4"]]
  :dev-dependencies [[lein-ring "0.4.0"]]
  :ring {:handler comp.core/app})

enliveの依存を追加。


テンプレートになるHTML

src/templateにenlive.htmlという名前で作成。

<html>
<head>
	<meta charset="utf-8">
	<title>Enlive</title>
</head>
<body>
<h1>this is replace String</h1>
</body>
</html>

ここでHTMLの先頭にDOCTYPEとかいれたら

パース段階でエラーになった。

これはバグ??


そしてcore.cljでHTMLを読込み、値もちょっといじってみる

(ns comp.core
  (:use compojure.core)
  (:use [hiccup core page-helpers])
  (:require [compojure.route :as route]
                [compojure.handler :as handler]
		[net.cgrand.enlive-html :as enlive])) ;1

;2
(enlive/deftemplate myEnlive "template/enlive.html" [hdr] [:h1] (enlive/content hdr))

;3
(defn doEnlive []
  (apply str (myEnlive "Hello First Enlive!"))) 


(defroutes main-routes
  (GET "/myenlive" [] (doEnlive))
)


(def app
  (handler/site main-routes))

1.enlive-htmlをimportして別名をつける


2.deftemplateマクロを使用してHTMLを読込み

ここでenlive.htmlを読込み、

[hdr]->引数

[:h1] ->選択要素

(enlive/content hdr) ->BODY内容の選択要素をhdrに置き換え

みたいなことをしている。

詳しくはgithubwikiとか参照。


3./myenliveをリクエストしたらdoEnlive関数を実行

定義した変換ルールへ対して引数を渡している。

その結果のコレクションを文字列としてつなげて

結果HTMLを生成。

  

これでテンプレートのh1要素内容の

中身をdoEnliveで渡している引数に置き換えた

HTMLが表示される。


そのうち使いやすくなってきそうだが、

まだまだなじまない。

もっとclojure自体にも慣れなければ。。。


プログラミングClojure
プログラミングClojure
posted with amazlet at 11.05.01
Stuart Halloway
オーム社
売り上げランキング: 116124