Lift中的Django标签和过滤器?

时间:2011-06-29 14:23:10

标签: django scala lift

这是关于复数过滤器的previous question的概括:

电梯是否有相当于Django的标签和过滤器?

标签是可以在html模板中直接使用的一小段预定义代码,例如:

{% now "jS F Y H:i" %}

现在以给定格式呈现时间。

过滤器

过滤器(在html模板中)对模板中的上下文变量进行操作,例如:

{{ value|capfirst }}

如果调用值“john”将导致“John”。或者:

{{ value|length }}

将字符串的长度渲染到模板中。

如您所见,过滤器对传递给模板的上下文变量进行操作。

2 个答案:

答案 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方法中调用它们。