【问题标题】:Iterate over a map in selmer遍历 selmer 中的地图
【发布时间】:2016-01-08 04:38:48
【问题描述】:

我想在 selmer 中迭代地图,这样我就可以打印键和值。据我所知,这是不支持开箱即用的,所以我尝试了以下方法:

(defn mapper-tag [args context-map content]
  (when-let [map-data (get context-map (keyword (first args))
                           (get context-map (first args)))]
    (apply str (for [[k v] map-data]
                 (selmer.parser/render (get-in content [:mapper :content]) {:key k :val v})))))

(selmer.parser/add-tag! :mapper mapper-tag :endmapper)
(selmer.parser/render  "{% mapper m %}KEY {{key}} \n{% endmapper %}"  {:m  {:a 1 :b 1}})

我希望这会输出类似 KEY a KEY b

但它输出

KEY KEY

任何指针?

【问题讨论】:

  • 您的输出与您的代码不匹配。 "FFF"去哪里了,"KEY"从哪里来?
  • 公平点,该示例是从两次单独的尝试中抄袭而来的,并且模板与输出不匹配。我现在已经更新了。

标签: clojure selmer


【解决方案1】:

Clojure 中的地图是 seqs,所以你可以使用 selmer for:

 (selmer.filters/add-filter! :key key)
 (selmer.filters/add-filter! :val val)
 (selmer.parser/render  "{% for item in m %} KEY is {{item|key}} VALUES is {{item|val}}\n{% endfor %}"  {:m  {:a 1 :b 1}})

【讨论】:

    【解决方案2】:

    Selmer 内置的{% for %} 循环allows for destructuring,因此您可以在模板中直接提取键/值:

    (selmer.parser/render
      "{% for key,val in m %}KEY: {{key}}, VALUE: {{val}}\n{% endfor %}"
      {:m {:a 1 :b 1}})
    

    输出:

    KEY: a, VALUE: 1
    KEY: b, VALUE: 1
    

    【讨论】:

      猜你喜欢
      • 2011-03-23
      • 2013-05-06
      • 2020-10-23
      • 2011-12-22
      • 1970-01-01
      • 2014-02-13
      • 1970-01-01
      相关资源
      最近更新 更多