我有这个:
(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我的静力学现在在哪里?
答案 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"}))
目录复制到该位置。