问题: Enlive片段制作时髦的HTML
问题的视觉参考:http://i.imgur.com/FIOzgZv.png
有关奇怪的HTML,请参见代码段底部
(ns notebook.handler
(:require [compojure.core :refer :all]
[compojure.handler :as handler]
[compojure.route :as route]
[net.cgrand.enlive-html :as html]))
(html/defsnippet nav "templates/nav.html" [:*]
[])
(html/deftemplate home-page "templates/base.html"
[]
[:body] (html/prepend (nav)))
(defroutes app-routes
(GET "/" [] (home-page))
(route/resources "/")
(route/not-found "Not Found"))
(def app
(handler/site app-routes))Base.html的内容:
<html>
<head>
<link rel=stylesheet href="css/base.css">
</head>
<body>
</body>
</html>Nav.html的内容:
<nav>
<ul>
<li>FlatNotes</li>
</ul>
</nav>访问localhost:3000时的HTML:
<html>
<head>
<link href="css/base.css" rel="stylesheet" />
</head>
<body><nav>
<ul>
<li>FlatNotes</li>
</ul>
</nav><ul>
<li>FlatNotes</li>
</ul><li>FlatNotes</li>
</body>
</html>(reduce str (html/emit* (nav)))显示了奇怪的HTML,这意味着问题发生在deftemplate之前的deftemplate中。
"<nav>\n <ul>\n\t<li>FlatNotes</li>\n </ul>\n\n</nav><ul>\n\t<li>FlatNotes</li>\n </ul><li>FlatNotes</li>"也许我弄错了[:*]所做的事情,或者有一个根本的误解,或者有一个我不知道的问题。我已经尽可能地将代码降到了最低限度,这样就可以了。
发布于 2014-01-27 14:17:01
:*表示通用选择器。它匹配nav.html中的每个元素-- nav、ul和li --这意味着导航段是:
<nav>
<ul>
<li>FlatNotes</li>
</ul>
</nav>
<ul>
<li>FlatNotes</li>
</ul>
<li>FlatNotes</li>传递给代码段定义的选择器应该指向代码段的单个顶级元素。如果您将:*更改为匹配单个元素(即:nav),那么它应该会为您提供您要寻找的片段。
https://stackoverflow.com/questions/21382703
复制相似问题