这是关于复数过滤器的previous question的概括:
电梯是否有相当于Django的标签和过滤器?
标签是可以在html模板中直接使用的一小段预定义代码,例如:
{% now "jS F Y H:i" %}
现在以给定格式呈现时间。
过滤器
过滤器(在html模板中)对模板中的上下文变量进行操作,例如:
{{ value|capfirst }}
如果调用值“john”将导致“John”。或者:
{{ value|length }}
将字符串的长度渲染到模板中。
如您所见,过滤器对传递给模板的上下文变量进行操作。
答案 0 :(得分:2)
考虑标记,您可以使用片段自己定义标记。
因为片段基本上是一个回调,就像Django标签一样。但是,你没有得到任何更简单的语法,因为Lift的模板是纯XML / Html。
<Lift:Tag.now format="jS F Y H:i" />
逻辑将在
中定义class Tag {
def now: NodeSeq = // ...
}
过滤是您通常无法在Lift模板中执行的操作,因为Lift不允许模板中的任何变量。因此整个概念不适用。 (你可以进行XML转换或绑定魔术,但对于简单的value.length
来说这会有点太多了。)
不,如果你需要Html中某个值的长度,你必须在代码片段中定义它并公开它。
如果您的模板中没有过滤器真的无法生存(虽然我可以向您保证,将所有HTML模板和代码分开并且一旦您习惯它就可以工作)是一件好事,看看{ {3}}也可以与Lift一起使用。
答案 1 :(得分:0)
这种逻辑应该在代码段的render
方法中。纯Scala(而不是模板语言混合)中的显示代码是测试,IDE和重构工具方面的一流公民。
这些类型的转换不是内置的,但你可以用implicits添加它们:
class HappyString(s: String) {
def capfirst = ....
}
implicit def toHappyString(s: String) = new HappyString(s)
然后在绑定您正在生成的任何值之前,在render
方法中调用它们。