【问题标题】:Django tags and filters in Lift?Lift中的Django标签和过滤器?
【发布时间】:2011-06-30 03:49:49
【问题描述】:

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

lift 是否有等同于 Django 的标签和过滤器?

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

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

以给定格式呈现时间。

过滤器

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

{{ value|capfirst }}

如果调用值“john”,将返回“John”。或者:

{{ value|length }}

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

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

【问题讨论】:

  • 按照设计,Lift 中的 html 模板上不允许有代码。
  • 请阅读simply.liftweb.net/index-Chapter-3.html#toc-Chapter-3 另外,如果您对 Lift 有任何疑问,请在 Lift 邮件列表中提问,或者至少查看之前在 Lift 邮件列表中提出的问题
  • 那本书我已经读了 10 遍了!我不认为我会从中得到更多。关于标签的问题只是为了完整性——因为我对过滤器真的很感兴趣。
  • 另外 - 对于否决我的人,请让我知道我的问题有什么问题,以便我可以纠正它。

标签: django scala lift


【解决方案1】:

考虑到标签,你可以用 sn-ps 自己定义。

因为 sn-p 基本上是一个回调,就像 Django 标签一样。但是,您不会得到任何更简单的语法,因为 Lift 的模板是纯 XML/Html。

<Lift:Tag.now format="jS F Y H:i" />

并且逻辑将在

中定义
class Tag {
  def now: NodeSeq = // ...
}

过滤是您通常无法在 Lift 模板中执行的操作,因为 Lift 不允许模板中存在任何变量。因此,整个概念是不适用的。 (您可以进行 XML 转换或绑定魔法,但对于简单的 value.length 来说,这有点过分了。)

不,如果您需要 Html 中某个值的长度,则必须在 sn-p 中定义并公开它。

如果你真的不能在你的模板中没有过滤器(尽管我可以向你保证,将所有 HTML 模板和代码分开是一件好事,一旦你习惯了它就可以工作),看看@ 987654321@也可以和Lift一起使用。

【讨论】:

  • 哇,太棒了,我不知道 Scalate 是 scala 的一部分,并且已经集成到 Lift 中!
  • 你必须自己插上它,我不确定它的文档有多好,但总的来说它应该可以工作。
  • 感谢您解释说过滤是我在 Lift 中无法执行的操作。很高兴看到有人真正回答我的问题。
【解决方案2】:

这种逻辑应该在sn-p的render方法中。以纯 Scala(而不是模板语言混合)显示代码在测试、IDE 和重构工具方面是一等公民。

这些类型的转换不是内置的,但您可以通过隐式添加它们:

class HappyString(s: String) {
  def capfirst = ....
}

implicit def toHappyString(s: String) = new HappyString(s)

然后在绑定您正在生成的任何值之前,在您的 render 方法中调用这些。

【讨论】:

    猜你喜欢
    • 2013-03-16
    • 2020-03-18
    • 2020-02-16
    • 2011-08-01
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多