想象一下,我想写一个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。