我是Clojure的新手,我正在尝试创建一个页面,您可以在其中查看左侧表格中的所有新闻,并且只能在页面右侧看到体育新闻。我试图在clostache / render中添加一个新参数:
(defn render-template [template-file params param]
(clostache/render (read-template template-file) params param))
(defn welcome []
(render-template "index" {:sports (model/justSports)} {:news (model/all)}))
模型/ all和model / justSports是:
(defn all []
(j/query mysql-db
(s/select * :news)))
(defn justSports []
(j/query mysql-db
(s/select * :news ["genre = ?" "sports"])))
并且新闻应该如下所示:
<div style="background-color: #D3D3D3; width: 450px; height: 800px; position: absolute; right: 10px; margin-top: 10px; border-radius: 25px;">
<sections>
{{#sports}}
<h2>{{title}}</h2>
<p>{{text}}<p>
{{/sports}}
</sections>
</div>
<div class="container" style="width: 500px; height: 800px; position: absolute; left: 20px;">
<h1>Listing Posts</h1>
<sections>
{{#news}}
<h2>{{title}}</h2>
<p>{{text}}<p>
{{/news}}
</sections>
</div>
但它不起作用。它只显示页面上第一个参数的数据。您怎么看?我怎样才能做到这一点?
P.S。 不要介意丑陋的CSS,我将继续努力:)
答案 0 :(得分:1)
以下内容应该有效:
(defn render-template [template-file params]
(clostache/render (read-template template-file) params))
(defn welcome []
(render-template "index" {:sports (model/justSports)
:news (model/all)}))
render
有三个&#34; arities&#34;:
(defn render "Renders the template with the data and, if supplied, partials." ([template] (render template {} {})) ([template data] (render template data {})) ([template data partials] (replace-all (render-template template data partials) [["\\\\\\{\\\\\\{" "{{"] ["\\\\\\}\\\\\\}" "}}"]])))
您正在调用3-arity重载,需要[template data partials]
,因此带有:news
键的第二个地图被clostache视为partials
。您想要调用只需[template data]
的2-arity版本,并使用密钥:news
&amp; :sports
。