如何处理Luminus中没有"资源"的html文件?

时间:2016-05-20 03:30:08

标签: html clojure luminus selmer

我有这个:

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

但是因为我已经移动了目录" templates"来自"资源"到根目录和服务器上我可能把它放在另一个地方,它不起作用。我这样做是因为我不想将html模板嵌入到输出jar中。 那么如何使代码工作,如何在" templates"中访问我的html文件?然后?

对于静态图像,同样的问题,css,js:我现在把它们放在根目录中,所以它们不在"资源"中。他们在" public"夹。但是,当我将它们称为" public / css / css1.css"时,它们没有被找到,也就是说,路径localhost:3000 / public / css / css1.css没有&# 39; t存在。

我如何告诉Luminus我的静力学现在在哪里?

1 个答案:

答案 0 :(得分:0)

模板位置

Selmer's documentation describes how to change the location of the templates

  

默认情况下,模板相对于ClassLoader URL定位。   如果您要为模板设置自定义位置,则可以使用   selmer.parser /集的资源路径!做到这一点:

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

也是   可以在相对于的位置设置根模板路径   应用程序的资源路径:

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

这允许重新创建模板   使用include和extends标签而不必指定完整标签   路径。

     

要将资源路径重置为默认值,只需将其传递给nil:

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

然后应用程序将会看起来   对于此位置的模板。如果您正在部署,这可能很有用   应用程序作为jar并希望能够修改HTML   无需重新部署。

如果您希望在更改模板时重新加载模板,您还应该记住Selmer缓存它们:

  

渲染文件时,Selmer将缓存已编译的模板。一个   如果文件的最后修改时间戳,将触发重新编译   变化。请注意,模板引用的文件中的更改将会发生   不会触发重新编译。这意味着如果您的模板扩展或   包括其他模板,您必须触摸正在呈现的文件   要使更改生效。

     

或者,您可以使用打开和关闭缓存   <{1}}和(selmer.parser/cache-on!)

资产位置

使用(selmer.parser/cache-off!)命名空间中的site-defaults配置静态资源的处理。您需要将其<app>.middleware条目配置为使用:static代替:

:files

您需要将文件从(-> site-defaults (assoc :static {:files "/var/www/html"})) 目录复制到该位置。