我正在使用塞尔默库(1.12.33版本),并构建了一个简单的自定义标签。我想进一步修改这个标记,以类似的方式允许使用过滤器,比如if、for、script和style。
似乎文档没有涵盖它;,有人知道怎么做吗?
下面是一些(非常简化的)示例代码,它提取了本质:
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!发布于 2021-02-09 11:01:03
我想,很明显的方法是,选择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相当陌生,而且还不相信我自己的洞察力。
https://stackoverflow.com/questions/66105750
复制相似问题