1

我正在使用Selmer库(版本 1.12.33)并构建了一个简单的自定义标签。我想进一步修改这个标签,以允许以类似的方式使用过滤器if,例如一些标准标签,例如, for,scriptstyle似乎允许它。

似乎文档没有涵盖它;有谁知道如何做到这一点?

下面是一些提炼精华的(非常简化的)示例代码:

1.定义自定义标签:

(selmer.parser/add-tag! :hello
  (fn [[arg & _] ctx] ; use only first argument
    (let [[name & filters] (clojure.string/split arg #"\|")] ; separate arg1 from appended filter(s)
      (format "Hi, %s!" (or ((keyword name) ctx) name))))) ; look up in context map, else use as-is

显然,我需要以filters某种方式在这里使用,但我不知道如何......

2. 渲染文字

(def myctx {:greet/name "world"})
(selmer.parser/render "{{greet/name|upper|safe}}" myctx)
   ; SUCCESS: expected & actual: WORLD
(selmer.parser/render "{% hello greet/name|upper|safe %}" myctx)
   ; FAIL: Expected: Hi, WORLD!, actual: Hi, world!
4

1 回答 1

1

我想 erm,显而易见的方法是选择 Selmer 只在输入 arg 上做它的事情,而不是试图重新发明 Selmer 的轮子。自定义标签将类似于:

(selmer.parser/add-tag! :hello
  (fn [[arg & _] ctx] ; use only first argument
    (let [name (selmer.parser/render (str "{{" arg "}}") ctx)]
      (format "Hello, %s!" name))))

太明显了?我将不胜感激,因为我对 Clojure 还很陌生,还不相信我自己的洞察力,因此我将不胜感激。

于 2021-02-09T11:01:03.797 回答