【问题标题】:Prevent PlayFramework's template engine from escaping my Strings防止 PlayFramework 的模板引擎转义我的字符串
【发布时间】:2013-08-27 12:56:52
【问题描述】:

我创建了一些实用程序来帮助我生成 HTML,并在我的视图中将它们引用为 @div( "class" -> "well" ){ Hello Well. }。到目前为止,这些类都是 NodeSeq 的子类,因为那时它们是 aren't escaped。但是我需要去掉类层次结构顶部的NodeSeq,因为 Scala 的 xml 存在缺陷,使我的代码变得很笨拙,而且那时我可以切换到 Traits。

所以我试图找出如何防止 Play 逃脱我的Tag-objects。但不幸的是,我发现唯一有效的解决方案是覆盖模板编译器并让用户在他的Build.scala 设置中指定我的编译器。

但我希望我忽略了一种更简单的方法?

【问题讨论】:

  • 我有点不确定你的意思(你的标签助手的示例代码会有所帮助)但我的第一个想法是你需要使用@Html("<span>stuff that won't be escaped</span>")?你能详细说明一下吗?
  • 我基本上是在 Play 的引擎之上构建一个自定义模板引擎。因此,用@Html 包裹我的电话不是一种选择。 taig.github.io/Play-Tmpltr

标签: scala templates playframework-2.1


【解决方案1】:

如果您的 html 帮助程序返回 'Html' 而不是 String,则无需在视图中使用 @Html 标记包装它们。

例如

import play.api.templates.Html

def a(src: String, value: String) : Html = Html(s"<a href='$src'>$value</a>")

将在如下视图中调用,无需包装在@Html中

@a("www.example.com", "Example")

【讨论】:

  • 这是一个好方法,但不幸的是,我的助手 @div 是 Play 通过其 toString 方法呈现的一个类。
【解决方案2】:

2.2.0-M1 版本开始,文档中出现了一种新方法,解释了如何向模板引擎添加自定义格式。这让我可以轻松地集成我的实用程序。

自定义模板格式: Java, Scala

【讨论】:

  • (两个链接都坏了)
猜你喜欢
  • 2015-09-14
  • 1970-01-01
  • 1970-01-01
  • 2012-08-28
  • 2020-11-16
  • 1970-01-01
  • 1970-01-01
  • 2018-03-04
  • 2016-10-26
相关资源
最近更新 更多