如何创建一个返回Hiccup结构的Clojure函数



想象一下,我想写一个Clojure函数,它返回一个相当于<h3>Hello</h3>的Hiccup结构。

我该怎么做

我试过

(defn render-location-details
[cur-location]
(let []
(list :h3 "Hello")
)
)

(defn render-location-details
[cur-location]
(let []
[:h3 "Hello"]
)
)

但在这两种情况下都得到了错误消息CCD_ 2。

更新1:我正在调用以下函数:

(defn generate-location-details-report
[all-locations]
(let
[
hiccup-title [:h2 "Locations"]
hiccup-body (into []
(map
render-location-details
all-locations)
)
]
(str
(html hiccup-title)
hiccup-body
)
)
)

有一个集合all-locations。对于其中的每一个元素,我都想用HTML(带有h3(标题(hiccup-body(创建一个部分,在标题前加上hiccup-title,并将所有这些转换为HTML。

打嗝html函数将获取一系列标记并将其呈现为字符串。

(let [locations ["one" "two" "three"]
title-html [[:h2 "Locations"]]
location-html (map (fn [location] [:h3 location]) locations)]
(html (concat title-html location-html)))
"<h2>Locations</h2><h3>one</h3><h3>two</h3><h3>three</h3>"

第一个render-location-details不起作用,因为列表不是向量,所以Hiccup不会将其渲染为标记。

第二个render-location-details是可以的,可以做你想做的事。空的(let []绑定是不必要的。然而,Hiccup将hiccup-body (into []放在一起会感到困惑——它试图将你的位置标签向量理解为标签,因为就Hiccup而言,vector=tag。

最新更新