clostache / render函数中有多个参数?

时间:2015-08-06 14:42:25

标签: mysql clojure

我是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,我将继续努力:)

1 个答案:

答案 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