1

我有这个:

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

但是由于我已经将目录“模板”从“资源”移动到了根目录,并且在服务器上我可能会将它放在另一个地方,所以它不起作用。我这样做是因为我不希望将 html 模板嵌入到输出 jar 中。那么我怎样才能使代码工作,我怎样才能在“模板”中访问我的 html 文件呢?

对于静态图像、css、js,同样的问题:我现在把它们放在根目录中,所以它们不在“资源”中。它们在“公共”文件夹中。但是,当我将它们称为“public/css/css1.css”时,它们没有被找到,即路径 localhost:3000/public/css/css1.css 不存在。

我如何告诉 Luminus 我的静态数据现在在哪里?

4

1 回答 1

0

模板位置

Selmer 的文档描述了如何更改模板的位置

默认情况下,模板位于相对于 ClassLoader URL 的位置。如果您想为模板设置自定义位置,可以使用 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 标签重新引用模板,而无需指定完整路径。

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

(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目录复制到该位置。

于 2016-05-20T04:22:20.960 回答