8

同じヘッダーとフッターを共有する静的な html ファイルがたくさんあります。このヘッダーとフッターをすべてのページで共有したいと考えています。今のところ、次のルーティングを使用していますが、少し見苦しく、すべての特殊なケースに対処する必要があります。PHPのインクルード機能など、これを行う簡単な方法はありますか?


(defroutes my-app
  (GET "/" 
    (html-with-template 
     "main.header"  "index.body" "main.footer" ))
  (GET "/*.html" 
    (html-with-template 
     "main.header" (str (params :*) ".body") "main.footer" ))
  (GET "/*/" 
    (html-with-template 
     (str (params :*) "/folder.header") 
     (str (params :*) "/index.body")
     (str (params :*) "/folder.footer")))
  (GET "/*" 
    (or (serve-file (params :*)) :next))
  (ANY "*"
    (page-not-found)))

4

1 に答える 1

8

Compojure について私が読んだことから、PHP のように応答本文への「自動付加」および「自動付加」の概念を固有にサポートしているとは思いません。

私が経験した他の Web フレームワークは、この責任をテンプレート エンジンに委任しますが、PHP は境界線を少し曖昧にします。ここに共通のスニペットを明示的に「含める」か、マクロをレンダリングするか、基本的な形式の継承 (このテンプレートはそのテンプレートを拡張します) を介してこれを行います。

基本的に、HTML が静的であろうと動的であろうと、テンプレート エンジンを使用すると、保守性を向上させるためにモジュール化できます。

とはいえ、Compojure には本格的な HTML テンプレート エンジンがバンドルされているようには見えません。HTML/XML ドメイン固有言語 (DSL) も含まれていますが、探しているのは Compojure と一緒に使用できるファーストクラスのテンプレート エンジンだと思います。

Enliveは Clojure にインスパイアされたテンプレート エンジンで最もヒット数が多いようですが、他にもあると確信しています。Clojure の JVM 統合を考えると、Java にインスパイアされた任意のテンプレート エンジンから選択することもできます。

どちらを選択するかによって、テンプレートをロード、レンダリング、および Compojure HTTP 応答にストリーミングするために、数行のグルー コードを記述する必要がある場合がありますが、一度記述すれば、どこでも再利用できます。

于 2009-09-08T23:07:40.250 に答える