Как я могу обрабатывать HTML-файлы в Luminus, которые не находятся в "ресурсах"?

У меня есть это:

(defn about-page []
    (layout/render "about.html" {:title "About"}))

Но так как я переместил каталог "шаблоны" из "ресурсов" в корневой каталог и на сервере я мог бы поместить его в другое место, он не работает. Я сделал это, потому что я не хочу, чтобы HTML-шаблоны были встроены в выходной файл. Итак, как я могу заставить код работать, как я могу получить доступ к моим html-файлам в "шаблонах"?

И тот же вопрос для статических изображений, css, js: я поместил их сейчас в корневой каталог, чтобы они не были в "ресурсах". Они в "публичной" папке. Однако, когда я называю их "public/css/css1.css", они не обнаруживаются, то есть путь localhost:3000/public/css/css1.css не существует.

Как я могу сказать Luminus, где сейчас находятся мои статики?

1 ответ

Решение

Расположение шаблонов

Документация Selmer описывает, как изменить расположение шаблонов:

По умолчанию шаблоны расположены относительно URL-адреса ClassLoader. Если вы хотите установить пользовательское местоположение для шаблонов, вы можете использовать selmer.parser / set-resource-path! сделать это:

(selmer.parser/set-resource-path! "/var/html/templates/")

Также можно установить путь к корневому шаблону в местоположении относительно пути к ресурсам приложения:

(set-resource-path! (clojure.java.io/resource "META-INF/foo/templates"))

Это позволяет повторно ссылаться на шаблоны с помощью тегов include и extends без указания полного пути.

Чтобы сбросить путь ресурса к значению по умолчанию, просто передайте ему ноль:

(selmer.parser/set-resource-path! nil)

Приложение будет искать шаблоны в этом месте. Это может быть полезно, если вы развертываете приложение в виде jar-файла и хотите иметь возможность изменять HTML-код без его повторного развертывания.

Поскольку вы хотите, чтобы ваши шаблоны перезагружались при их изменении, вы также должны помнить, что Selmer кеширует их:

При рендеринге файлов Selmer будет кэшировать скомпилированный шаблон. Повторная компиляция будет инициирована, если последняя измененная временная метка файла изменится. Обратите внимание, что изменения в файлах, на которые ссылается шаблон, не будут вызывать перекомпиляцию. Это означает, что если ваш шаблон расширяет или включает другие шаблоны, вы должны коснуться файла, который отображается, чтобы изменения вступили в силу.

Кроме того, вы можете включить и выключить кеширование, используя (selmer.parser/cache-on!) а также (selmer.parser/cache-off!) соответственно.

Расположение активов

Обработка статических ресурсов настраивается с помощью site-defaults в вашем <app>.middleware Пространство имен. Вам нужно настроить его ' :static запись для использования :files вместо:

(-> site-defaults
  (assoc :static {:files "/var/www/html"}))

и вам нужно скопировать файлы из resources/public каталог к ​​этому месту.

Другие вопросы по тегам