所以我使用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很新,我也很活跃
答案 0 :(得分:0)
您的layout
模板希望content
参数是一个函数,而当您执行(blogp id)
时,实际上是传递函数的结果而不是函数本身。你能做的就是像这样使用它:
(createpage (partial blogp id) "Blog")