0

私はこれをwebnoirで行おうとしています。

これは機能します:

(defpage [:post "/testurl] {:keys [name phone]}
  (html5
    (str "name: " name)
    (str "phone: " phone)))

ここで、多くのモジュールのdefpageを生成したいと思います。各モジュールには、異なるフィールドのリストがあります。そして、関数からdefpagesを呼び出したいと思います。defpageは、フィールドの投稿を受け入れる必要があります。

基本的に私はこれを持っています:(def fields1 ["Name" "Phone" "Email" "xyz"])

そして、手動でキーを指定するのではなく、これをdefpageに渡したいと思います。

フィールドは将来変更される可能性があるため、コードでフィールドを取得し、サーバーの起動時に動的にdefpagesを作成する必要があります。

出来ますか?

助けてくれてありがとう!

4

1 に答える 1

0

マクロでこれを行うことができます:

(defmacro defpages [pages]
  `(do
     ~@(map (fn [page]
              `(~'defpage [:post ~(str "/" (page :name))]
                 {:keys ~(into [] (map symbol (page :fields)))}
                 (~'html5
                  ~@(map (fn [field]
                           `(str ~(str field ": ")
                                 ~(symbol field)))
                         (page :fields))))) pages)))



(defpages [{:name "testurl"
            :fields ["name" "phone"]}
           {:name "user"
            :fields ["age" "address"]}])
于 2013-03-20T16:33:57.780 に答える