パラメータ化されたhtmlテンプレートで変換を実行する関数を定義する「Enlivonic」の方法を見つけようとしています。
つまり、引数としてテンプレートも取る 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
マクロはコンパイル時にテンプレートを 1 回呼び出すだけです。したがって、これが遅すぎる場合は、最適化するためにできることがあります ( clojure、enlive、multi-siteを参照) 。