Ich baue von der lein new compojure-app
Vorlage. Ich habe eine Route zu /
, die gut funktioniert, sowie eine Route zu /foo/
, die funktioniert. Zwischen den beiden Seiten ändert sich nur der Körper, also würde ich gerne so viel wie möglich in eine gemeinsame Ansichtsfunktion einbinden (ich verwende den Standard common
in views/layout.clj
). Allerdings, wenn Ressourcen nach relativen Pfad, wie css/main.css
, meine Route zu /
funktioniert gut, aber die Route zu /foo/
sucht nach /foo/css/main.css
statt in das Stammverzeichnis suchen. Wie sortiere ich statische Ressourcen mit relativen Pfaden zu beliebigen Routen?Serving statische Ressourcen mit relativen Pfaden in Clojure zu verschiedenen Routen
2
A
Antwort
2
Sie müssen wrap-base-url
Middleware zusammen mit include-css
verwenden. Die wrap-base-url
wird *base-url*
dynamische var, die zum Erstellen von URLs für Ressourcen mit include-css
, include-js
oder mit to-url
direkt verwendet werden.
Wenn Sie Ihre App als War in einem Servlet-Container bereitstellen, erkennt wrap-base-url
Ihren App-Stammkontext automatisch (z. B. /my-app/
). Andernfalls müssen Sie den Stammpfad manuell als zweites Argument angeben.
Ein wenig mehr Klarheit: Der an 'include-css' übergebene String muss mit einem '/' beginnen. Mit anderen Worten, tu das nicht: '(include-css" css/main.css ")'. Tun Sie dies stattdessen: '(include-css" /css/main.css ")'. Subtil, aber es ist der Unterschied zwischen arbeiten und nicht. –