我正在使用Clojure开发一个web应用程序,目前使用的是环、胡须、沙洲和打嗝。我有一个名为job的资源,还有一条用于以多步形式显示特定步骤的路径,该步骤用于定义如下的特定作业(为了简单起见,省略了其他路径):
(def web-app
(moustache/app
;; matches things like "/job/32/foo/bar"
:get [["job" id & step]
(fn [req] (web.controllers.job/show-job id step))]))在“我的控制器”呈现的视图中,有指向同一作业中其他步骤的链接。目前,这些urls是手工构造的,例如(str "/job/" id step)。我不喜欢url中那个硬编码的"/job/"部分,因为它重复了我在胡子路径中定义的内容;如果我改变了路径,我需要改变我的控制器,这是一个比我所关心的更紧密的耦合。
我知道Rails的路由系统有从参数生成urls的方法,我希望我有类似的功能,即我希望我有一个函数url-for,我可以这样调用它:
(url-for :job 32 "foo" "bar")
; => "/job/32/foo/bar"有没有一个Clojure web框架可以让这件事变得简单?如果没有,你对如何实现这一点有什么想法?
发布于 2012-03-13 17:34:42
Noir提供类似的东西。它甚至被称为url-for。
发布于 2012-03-13 15:14:04
您提到的示例函数可以实现如下。但我不确定这是否正是你要找的。
(defn url-for [& rest]
(reduce
#(str %1 "/" %2) "" (map #(if (keyword? %1) (name %1) (str %1)) rest)))https://stackoverflow.com/questions/9679573
复制相似问题