2

こんにちはみんな:私は次のようなdefroutes宣言を備えた「階層型」スタイルのサイトを構成しています:

(defroutes main-routes
  (GET "/" [] (resp/redirect "/public/index.html")
  (GET "/blog" [] (resp/redirect "/public/blogs/index.html")
  (GET "/tools" [] (resp/redirect "/public/tools/index.html"))

ただし、これらのページをより動的なものにしたいと考えています。つまり、/blog ディレクトリのコンテンツをスキャンして index.html ページを生成し、同様に /tools ルートもスキャンしたいと考えています。

つまり、最終的には、ルートを次のようにしたいと思います。

(defroutes main-routes
      (GET "/" [] (resp/redirect "/public/index.html")
      (GET "/blog" [] (generate-index "/public/blog"))
      (GET "/tools" [] (generate-index "/public/tools")))

compojure を介してサイトを通る動的パスを構築するための簡単なロードマップはありますか?

より具体的には----入力されたパスをスキャンしてすべてのファイルへのリンクを返す(インデックス生成)関数を構築する方法について何か提案はありますか?この種のイディオムに基づく非常に多くのブログ プラットフォームが最近台頭していることを考えると、compojure にはすでにそのような機能があると思います。

4

1 に答える 1

1

あなたが言ったことのほとんどを行うのはかなり簡単です。

何が起こっているのかを理解するのに役立ついくつかの一般的な読み物と同様に、特に見たいと思う 2 つのことがあります。

まず、何らかの形式の HTML テンプレート ツールを見てみたいと思うでしょう。必要な文字列を作成するだけでも可能ですが、使用すると簡単になります。2 つの異なる主なスタイルを見てきましたが、どちらを選択するかは好みによって異なります。

  • Hiccupは、Clojure のデータ構造を採用し、それらを HTML に変換することに重点を置いています。
  • Enliveは、HTML テンプレート ファイルを取得し、それらを正しい最終フォームに変換することに重点を置いています。

ファイルのリストを実際に取得するには、 の使用を検討してfile-seqください。ファイル名を適切な投稿名とファイルに変換し、それをデータとして使用してページへのリンクを生成します。

もう 1 つ、 Compojure ルート テンプレートRing Responsesについてさらに学びたいと思うでしょう。

Compojure のルート テンプレートを使用すると、ルート パラメーターを簡単に渡すことができ、そこから応答を生成できます。これに続くのは、パラメーターとして html ページ名を使用して単純な静的 html ファイルを提供する単純な例です。

(GET "/blog/:post" [post] (ring/file-response (str "/public/blogs/" post ".html")))

最後に、残りの Compojure および Ring wiki を読むことを検討してください。Ring wiki は、コアの「仕組み」に関する非常に優れた情報を提供します。Compojure wiki は、Compojure を最大限に活用する方法に関するいくつかの良い例を提供しています。これは、ルートを処理し、Ring のページ生成を簡単にするための簡単な方法を提供することに焦点を当てていますが、唯一の方法ではありません。

サイトをどこに移動させたいかによっては、Noirも検討したいと思います。これは、すべての要素をまとめて、その過程でいくつかの一般的な問題を解決するのに優れたフレームワークです。

于 2012-05-24T23:40:10.247 に答える