使用Clojure开发Web入门系列(四)
在(三)介绍并使用了Hiccup这个生成html的库,甚是方便,但是对于前后端分离的一些web站点也不是太方便。接下来介绍另外一种方法来渲染html页面,selmer。如果你是一个PHP程序员,那么你会发现他跟smarty有几分相似。 零、添加依赖 在project.clj的dependencies添加[selmer "1.11.8"] 一、修改代码 修改系列三里面的代码到selmer实现。 home 首先在resources目录下添加home.html,内容如下: <h1>Home</h1> 在resources目录添加是因为selmer默认会去classpath指定的路径里面找对应的模板文件。 修改core.clj,在:require后面添加selmer:[selmer.parser :refer [render-file]] 修改defroutes app,在添加一条路由规则: (GET "/home" [] (render-file "home.html" {})) 访问http://localhost:3000/home,可以看到html模板里面的内容已经显示出来了。如果没有运行程序请执行:lein run form 现在来修改表单页面,使用resources/index.html作为模板文件,内容如下: <!DOCTYPE html> <html> <body> <h1>Hello form</h1> <form action="/message" method="post"> <div> <label for="name">名字:</label> <input name="name" type="text" /> </div> <div> <label for="message">消息:</label> <textarea cols="80" name="message" rows="5"></textarea> </div> <div><input type="submit" value="提交" /></div> </form> </body> </html> 修改defroutes app里面"/"的定义为: (GET "/" [] (render-file "index.html" {})) 访问http://localhost:3000,表单出来了。 message 修改表单提交后的页面。 先在建立消息模板文件resources/message.html,内容如下: <!DOCTYPE html> <html> <body> <h2>{{ name }}</h2> <p>{{ message }}</p> </body> </html> {{ name }}和{{ message }}是占位符,selmer把render-file的第二个map参数解析到模板文件里面,{{ name }}对应的是:name的值。 ...