2013-02-13 46 views
3

我有一个照片链接列表,并且想用clojure和noir生成img标签。使用Noir从列表生成img标签

在这里,我得到的链接:

(def photos 
(->> (get-in result ["photoset" "photo"]) (map #(str "http://farm"(get % "farm") 
".staticflickr.com/"(get % "server")"/"(get % "id")"_"(get % "secret")"_b.jpg")))) 

结果:

(http://farm9.staticflickr.com/8087/8455893107_1a3236df06_b.jpg http://farm9.staticflickr.com/8235/8469482476_4c1bf59214_b.jpg) 

然后我尝试生成从该列表中的img标签:

(defpage "/" [] 
(mylayout/layout 
(doseq [e photos] (prn e)) 
)) 

(电话(defpartial layout [& content] ...)

我试图让下面的输出中的黑色基础的网站的各个环节:

[:img {:src "url"}] 

我尝试这种之一,但没有成功:

(doseq [e photos] ([:img {:src e}])) 

我怎样才能通过链接到布局,以便它生成img标签?

谢谢!

回答

4

这些任选其一:

(map #(vector :img {:src %}) photos) 

(for [url photos] 
    [:img {:src url}]) 

编辑:如前所述Chuckdoseq是副作用。您想“收集”结果并将其发送到模板。要做到这一点,你需要使用列表理解,比如for或者仅仅是map

我讨厌下雨您的游行,但只是让你知道,noir has been deprecated

+1

换句话说,怪的错误是1)使用'doseq',而不是'for'('doseq'是当你不是为了关心返回值),以及2)将矢量放在矢量上(你不是想要调用它)。 – Chuck 2013-02-13 20:47:22