我正在尝试找到一种“Enlivonic”方式来定义一个函数,该函数将对参数化的 html 模板执行转换。
换句话说,我如何定义类似 defsnippet 的东西,它也将模板作为参数?
我看了看,片段和转换,但我对宏有点迷失:-(
如果您有一个转换,但想为其提供不同的模板,您可以尝试:
(defn multi-template [t]
(template t [h1 h2]
[:h1] (content h1)
[:h2] (content h2)))
当使用 html 模板调用此函数时,将返回一个以 h1 和 h2 作为参数并将它们替换到给定模板中的函数。如下调用它:
((multi-template "your-template.html") "heading 1 content" "heading 2 content")
当我有许多不同的图片库设计作为模板并想要动态切换时,我使用了类似的东西。
注意:这每次都会动态创建模板,而deftemplate
宏只在编译时调用一次模板。所以如果这太慢了,你可以做一些事情来优化它(参见clojure, enlive, multi-site)