You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Clostache遍历Map构成的Vector并显示键值

解决Clostache模板遍历带命名空间键的Map向量问题

你的问题核心是数据中的键为带命名空间的Clojure关键字(如:players/id),初始模板仅输出整个Map的字符串形式,无法提取单个字段值。以下是两种可行方案:

方案一:直接在模板中引用带命名空间的键

Clostache支持直接访问带命名空间的关键字键,只需在模板中写出完整的键名即可。修改后的模板如下:

<ul>
  {{#players}}
  <li>
    ID: {{players/id}}<br>
    姓名: {{players/name}}<br>
    分数: {{players/score}}<br>
    创建时间: {{players/created_at}}<br>
    更新时间: {{players/updated_at}}
  </li>
  {{/players}}
</ul>

此方案无需修改数据,直接在模板中对应键名即可提取值。

方案二:预处理数据,移除键的命名空间(推荐)

如果希望模板更简洁,可在Clojure代码中先处理数据,将带命名空间的键转换为短键(如:id替代:players/id),同时可格式化日期类型的字段:

(require '[clj-time.format :as f])

;; 移除键的命名空间
(defn remove-key-namespace [player-map]
  (reduce-kv (fn [acc k v]
               (assoc acc (keyword (name k)) v))
             {}
             player-map))

;; 格式化日期(可选)
(def date-formatter (f/formatter "yyyy-MM-dd HH:mm:ss"))
(defn format-inst-date [inst]
  (when inst (f/unparse date-formatter inst)))

;; 处理玩家数据
(def process-player-data (fn [raw-data]
                           (map (fn [player]
                                  (-> player
                                      remove-key-namespace
                                      (update :created_at format-inst-date)
                                      (update :updated_at format-inst-date)))
                                raw-data)))

;; 使用示例:将你的原始数据传入处理函数
(def processed-players (process-player-data your-raw-player-data))

处理后的数据键变为:id、:name等,模板可简化为:

<ul>
  {{#players}}
  <li>
    ID: {{id}}<br>
    姓名: {{name}}<br>
    分数: {{score}}<br>
    创建时间: {{created_at}}<br>
    更新时间: {{updated_at}}
  </li>
  {{/players}}
</ul>

内容的提问来源于stack exchange,提问作者jwesonga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 15:52:36