Dynamic 在compojure中动态添加路由

Dynamic 在compojure中动态添加路由,dynamic,path,clojure,compojure,Dynamic,Path,Clojure,Compojure,大家好:我在compojure中有一个“Hierarchychal”样式的站点,其defroutes声明如下: (defroutes main-routes (GET "/" [] (resp/redirect "/public/index.html") (GET "/blog" [] (resp/redirect "/public/blogs/index.html") (GET "/tools" [] (resp/redirect "/public/tools/index.html

大家好:我在compojure中有一个“Hierarchychal”样式的站点,其defroutes声明如下:

(defroutes main-routes
  (GET "/" [] (resp/redirect "/public/index.html")
  (GET "/blog" [] (resp/redirect "/public/blogs/index.html")
  (GET "/tools" [] (resp/redirect "/public/tools/index.html"))
但是,我希望这些页面更加动态—也就是说,我希望index.html页面通过扫描/blog目录的内容来生成,同样,对于/tools路径也是如此

也就是说,最后,我希望路线是这样的:

(defroutes main-routes
      (GET "/" [] (resp/redirect "/public/index.html")
      (GET "/blog" [] (generate-index "/public/blog"))
      (GET "/tools" [] (generate-index "/public/tools")))
是否有一个简单的路线图,可以通过compojure在我的站点中构建动态路径


更具体地说——对于如何构建(生成索引)函数来扫描输入的路径并返回所有文件的链接,有什么建议吗?我认为compojure可能已经有了这样一个功能,因为最近有这么多基于这种习惯用法的博客平台在兴起。

你说的大部分内容都相当简单

有两件事你要特别注意,还有一些通俗读物可以帮助你理解正在发生的事情

首先,您需要了解某种形式的HTML模板工具。虽然只构建必要的字符串是可能的,但如果使用一个字符串,事情会变得更简单。我见过两种不同的主要款式,选择哪一种取决于你的口味

  • 专注于获取Clojure数据结构并将其转换为HTML
  • 重点是获取HTML模板文件并将其转换为正确的最终形式

实际获取文件列表时,请考虑使用。将文件名转换为适当的帖子名和文件,然后将其作为数据生成指向页面的链接

另一件你想了解更多的事情是和一点关于

Compojure的路由模板可以轻松地传递路由参数,然后您可以根据这些参数生成响应。下面是一个简单的示例,它使用html页面名称作为参数提供一个简单的静态html文件

(GET "/blog/:post" [post] (ring/file-response (str "/public/blogs/" post ".html")))
最后,考虑通过其他组件和环维基阅读。Ring wiki提供了一些关于核心“事物如何工作”的非常好的信息。Compojure wiki提供了一些关于如何最好地利用Compojure的好例子,它只专注于提供一种简单的方法——但远不是唯一的方法——来处理路由并使Ring的页面生成变得简单

<> P>根据您希望站点的位置,我也会考虑看一看,这是一个框架,它能很好地把所有的片段拼凑起来,解决这个过程中的一些常见问题。