如何使用Clojure及其Web框架实现类似于Rails'url_for的功能?

Ger*_*ert 5 clojure url-routing ring

我正在使用Clojure开发一个Web应用程序,目前有Ring,Moustache,SandbarHiccup.我有一个名为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))]))
Run Code Online (Sandbox Code Playgroud)

在我的控制器呈现的视图中,有指向同一作业中其他步骤的链接.目前,这些网址是手工构建的,例如(str "/job/" id step).我不喜欢"/job/"网址的硬编码部分,因为它重复我在胡子路线中定义的内容; 如果我改变路线,我需要更换我的控制器,这是一个比我关心的更紧密的耦合.

我知道Rails的路由系统有从参数生成URL的方法,我希望我有类似的功能,即我希望我有一个url-for我可以这样调用的函数:

(url-for :job 32 "foo" "bar")
; => "/job/32/foo/bar"
Run Code Online (Sandbox Code Playgroud)

是否有一个Clojure Web框架,使这很容易?如果没有,您对如何实施这一点有何看法?

Mat*_*ard 4

Noir 提供了类似的东西。甚至还被称为url-for.