Clojure enlive:函数html-content不能运行带参数的函数(?)

时间:2014-11-13 04:19:20

标签: html clojure enlive

所以我使用deftemplate创建了一个简单的html模板,

(html/deftemplate header "selmer/header.html"
  [])    

(html/deftemplate footer "selmer/footer.html"
  [])

(html/deftemplate blogp "selmer/blogpage.html"
  [id]
  [:bjudul] (html/content (:title (db/finddata id)))
  [:bisi] (html/content (:content (db/finddata id))))

(注意:db/finddata id是一个将数字作为数据ID 的函数,并通过某个数据ID 从我的数据库中返回数据地图, 例如,如果我输入

(db/finddata 1)   

它会产生这个

{:title "Wowtitle", :content "wowcontent", :id 1}

来自我的数据库的数据 id为1

然后

(html/deftemplate layout "selmer/layout.html"
  [content contenttitle]
  [:title] (html/content contenttitle)
  [:header] (html/html-content (apply str (header)))
  [:pagecontents] (html/html-content (apply str (content)))
  [:footer] (html/html-content (apply str (footer))))

(defn createpage [pcontents tcontent]
  (apply str (layout pcontents tcontent)))

但是当我在repl中输入

(createpage (blogp id) "Blog")

它会产生此错误

ClassCastException clojure.lang.PersistentVector$ChunkedSeq cannot be cast to clojure.lang.IFn  zenblog.pageandctrl.pagelayout/fn--14851/fn--14853/fn--14854 (form-init2686073120612682758.clj:1)

它似乎与另一个deftemplate工作得很好,例如,如果我改变了博客代码

(html/deftemplate blogp "selmer/blogpage.html"
  []
  [:bjudul] (html/content (:Judul (db/findById **1**)))
  [:bisi] (html/content (:Isi (db/findById **1**))))

然后我在repl中键入了这个

(createpage blogp "Blog")

它运作得很好。有什么想法吗?

我对clojure很新,我也很活跃

1 个答案:

答案 0 :(得分:0)

您的layout模板希望content参数是一个函数,而当您执行(blogp id)时,实际上是传递函数的结果而不是函数本身。你能做的就是像这样使用它:

(createpage (partial blogp id) "Blog")