Clojure 使用compojure解析多个复选框中的值
我创建了一个小型的compojure web应用程序,它可以使用提供的URL显示从其他网站获取的多个值。目前,这个URL是在我的一个函数中硬编码的,现在我想根据文本字段和复选框中的值添加动态URL创建功能 以下是我的页面的外观:Clojure 使用compojure解析多个复选框中的值,clojure,compojure,hiccup,Clojure,Compojure,Hiccup,我创建了一个小型的compojure web应用程序,它可以使用提供的URL显示从其他网站获取的多个值。目前,这个URL是在我的一个函数中硬编码的,现在我想根据文本字段和复选框中的值添加动态URL创建功能 以下是我的页面的外观: (defn view-layout [& content] (html [:body content])) (defn view-input [] (view-layout [:h2 "Find"] [:form {:metho
(defn view-layout [& content]
(html [:body content]))
(defn view-input []
(view-layout
[:h2 "Find"]
[:form {:method "post" :action "/"}
( for [category ["Cat1" "Cat2" "Cat3"]]
[:input {:type "checkbox" :id category } category ] )
[:br]
[:input {:type "text" :id "a" :value "insert manga name"}] [:br]
[:input.action {:type "submit" :value "Find"}]
[:a {:href "/downloads"} "Downloads"]]))
(defn view-output []
(view-layout
[:h2 "default images"]
[:form {:method "post" :action "/"}
(for [name (get-content-from-url (create-url))]
[:label name [:br]]
)]))
(defn create-manga-url
[]
"http://www.mysite.net/search/?tfield=&check=000")
以下是路线:
(defroutes main-routes
(GET "/" []
(view-input))
(GET "/downloads" []
(view-downloads))
(POST "/" []
(view-output) ))
目前,我需要(创建url)
函数(返回一个字符串)的帮助,在该函数中,我希望获取搜索所必需的所有字段(一个文本字段和3个复选框),并解析其中的值,这些值将被输入(连接)url-for复选框,如果选中,复选部分的值将为1,而不是0,否则保持为0(如果选择了两个复选框,则选中=100或010、011)。对于文本字段,tfield=userinputtext
编辑
作为一名.Net和Java开发人员,我花了很多时间,而compojure的这一部分对我来说完全是个谜。
这是我希望通过(创建url)
函数(以OO风格编写的伪代码)实现的:
我为这个伪代码的样子道歉,但这是我想学习的部分:如何从表单中获取数据并对其进行解析(在本例中,我想将表单字段中的值附加到字符串中)
有人能帮我吗?首先,您需要向HTML输入元素添加“name”属性。“id”属性不会在post时发送到服务器 接下来,我想一个类似于您的示例的快速方法是:
(POST "/" [a Cat1 Cat2 Cat3] (create-url a [Cat1 Cat2 Cat3]))
然后像这样:
(defn checked? [c]
(and c (= c "on")))
(defn checked->num [c]
(if (checked? c) "1" "0"))
(defn create-url [a cats]
(str "x?tfield=" a "&check="
(apply str (for [c cats] (checked->num c)))))
或者干脆放下两个助手:
(defn create-url [a cats]
(str "x?tfield=" a "&check="
(apply str (map #(if (= "on" %) "1" "0") cats))))
首先,您需要向HTML输入元素添加“name”属性。“id”属性不会在post时发送到服务器 接下来,我想一个类似于您的示例的快速方法是:
(POST "/" [a Cat1 Cat2 Cat3] (create-url a [Cat1 Cat2 Cat3]))
然后像这样:
(defn checked? [c]
(and c (= c "on")))
(defn checked->num [c]
(if (checked? c) "1" "0"))
(defn create-url [a cats]
(str "x?tfield=" a "&check="
(apply str (for [c cats] (checked->num c)))))
或者干脆放下两个助手:
(defn create-url [a cats]
(str "x?tfield=" a "&check="
(apply str (map #(if (= "on" %) "1" "0") cats))))
如果您提供一些带有参数和预期返回值的
创建url
的示例调用,可能会有所帮助。您好,ivat,感谢您的响应。不幸的是,我不知道如何在clojure中解析html页面中的值。我只能提供伪代码,这可以解释我想要实现什么。ivat,我为我的函数提供了一个伪代码。但问题是,我不知道如何使用路径,也不知道如何为函数提供正确的参数。你认为你能帮我吗?也许康博朱尔的文档能帮上忙?如本页所示:如果您提供一些调用创建url
的示例,并提供参数和预期的返回值,可能会有所帮助。您好,谢谢您的回复。不幸的是,我不知道如何在clojure中解析html页面中的值。我只能提供伪代码,这可以解释我想要实现什么。ivat,我为我的函数提供了一个伪代码。但问题是,我不知道如何使用路径,也不知道如何为函数提供正确的参数。你认为你能帮我吗?也许康博朱尔的文档能帮上忙?如本页所示: