在使用Play Framework2时,我注意到呈现的Scala HTML模板不喜欢缩进的@if或@for。
举个例子,类似这样的东西:
<ul>
@for(test <- tests) {
<li>@test.name</li>
}
</ul>会有额外的不需要的空格。为了修复它,我需要这样做:
<ul>
@for(test <- tests) {
<li>@test.name</li>
}
</ul>这将使额外的@defining或其他语句变得混乱。
那么,有没有一种方法可以美化/美化Scala模板渲染,以消除多余的空格?
更新:
阅读this thread时,我注意到由于模板顶部的参数,还添加了额外的空格和换行符。所以这就是:
@(myParam: String)
<!DOCTYPE html>
<html>
<head></head>
<body></body>
</html>将在生成的HTML顶部添加3个额外的换行符。这绝对很烦人。
这个帖子似乎在说,目前没有解决这个问题的办法。
发布于 2017-04-15 01:02:02
我期待的是能够真正“美化”HTML输出的答案,除了删除空行之外,还可以适当地缩进输出。然而,HtmlCompressor只压缩输出,并且没有漂亮的打印逻辑。
我想出了一个解决方案,在生产中使用HtmlCompressor进行压缩,在开发过程中使用Jsoup进行漂亮的打印。我并不关心显式调用prettify转换,所以我的解决方案如下所示:
// required extra imports
import play.twirl.api.Html
import com.googlecode.htmlcompressor.compressor.HtmlCompressor
import org.jsoup.Jsoup
import org.jsoup.parser.Parser
@Singleton
class MyController @Inject() (environment: Environment) extends Controller {
/** Helper to format Html */
def prettify(content: Html): Html = {
val rawString = content.body.trim()
val html = environment.mode match {
case Mode.Dev =>
val doc = Jsoup.parse(rawString, "", Parser.xmlParser())
doc.outputSettings().indentAmount(2)
Html(doc.toString())
case _ =>
val compressor = new HtmlCompressor()
compressor.setPreserveLineBreaks(true)
Html(compressor.compress(rawString))
}
html
}
/** example usage */
def index = Action {
Ok(prettify(views.html.index))
}
} 在dev模式下,这会生成一些格式良好的HTML。
对build.sbt所需的更改包括:
libraryDependencies += "org.jsoup" % "jsoup" % "1.10.2"
libraryDependencies += "com.googlecode.htmlcompressor" % "htmlcompressor" % "1.5.2"https://stackoverflow.com/questions/14154671
复制相似问题