我试图在webnoir中这样做。
这有效:
(defpage [:post "/testurl] {:keys [name phone]}
(html5
(str "name: " name)
(str "phone: " phone)))
现在我想为许多模块生成defpages,每个模块都有一个不同字段的列表。我想从一个函数中调用defpages。 defpage必须接受字段的帖子。
基本上我有这个:(def fields1 ["Name" "Phone" "Email" "xyz"])
我想将其传递给defpage,而不必手动指定密钥。
这些字段将来可能会发生变化,这就是为什么我希望我的代码在服务器启动时动态选择字段并创建defpages。
有可能吗?
感谢您的帮助!
答案 0 :(得分: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"]}])