将 Clojure 中具有相对路径的静态资源提供给不同的路由

Serving static resources with relative paths in Clojure to different routes

我正在构建 lein new compojure-app 模板。我有一条通往 / 的路线可以正常工作,还有一条通往 /foo/ 的路线也可以。在这两个页面之间,只有主体发生了变化,所以我想尽可能多地使用一个通用视图函数(我在 views/layout.clj 中使用默认的 common)。然而,当通过相对路径提供资源时,比如 css/main.css,我到 / 的路由工作正常,但是到 /foo/ 的路由正在寻找 /foo/css/main.css 而不是在根目录中寻找目录。我如何使用到任意路由的相对路径来提供静态资源?

您需要使用 wrap-base-url middleware along with include-css. The wrap-base-url will set *base-url* 动态变量,它将用于为 include-cssinclude-js 或直接使用 to-url 中包含的资源构建 URL。

如果您将应用部署为 servlet 容器中的 war,wrap-base-url 将自动检测您的应用根上下文(例如 /my-app/)。否则你需要手动提供根路径作为第二个参数。