首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否可以使用play Framework2来美化scala模板?

是否可以使用play Framework2来美化scala模板?
EN

Stack Overflow用户
提问于 2013-01-04 17:46:12
回答 5查看 4.2K关注 0票数 18

在使用Play Framework2时,我注意到呈现的Scala HTML模板不喜欢缩进的@if@for

举个例子,类似这样的东西:

代码语言:javascript
运行
复制
<ul>
   @for(test <- tests) {
      <li>@test.name</li>
   }
</ul>

会有额外的不需要的空格。为了修复它,我需要这样做:

代码语言:javascript
运行
复制
<ul>
@for(test <- tests) {
   <li>@test.name</li>
}
</ul>

这将使额外的@defining或其他语句变得混乱。

那么,有没有一种方法可以美化/美化Scala模板渲染,以消除多余的空格?

更新:

阅读this thread时,我注意到由于模板顶部的参数,还添加了额外的空格和换行符。所以这就是:

代码语言:javascript
运行
复制
@(myParam: String)


<!DOCTYPE html>
<html>
   <head></head>
   <body></body>
</html>

将在生成的HTML顶部添加3个额外的换行符。这绝对很烦人。

这个帖子似乎在说,目前没有解决这个问题的办法。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-01-08 17:54:52

因此,为了获得更多细节,我使用了@biesor answer,并完成了以下步骤:

将HtmlCompressor添加为插件

在Build.scala中:

代码语言:javascript
运行
复制
val appDependencies = Seq(
    "com.googlecode.htmlcompressor" % "htmlcompressor" % "1.5.2"
)

PrettyController

代码语言:javascript
运行
复制
public class PrettyController extends Controller {

    public static Results.Status ok(Content content) {
        return Results.ok(prettify(content)).as("text/html; charset=utf-8");        
    }

    public static Results.Status badRequest(Content content) {
        return Results.badRequest(prettify(content)).as("text/html; charset=utf-8");        
    }

    public static Results.Status notFound(Content content) {
        return Results.notFound(prettify(content)).as("text/html; charset=utf-8");      
    }

    public static Results.Status forbidden(Content content) {
        return Results.forbidden(prettify(content)).as("text/html; charset=utf-8");     
    }

    public static Results.Status internalServerError(Content content) {
        return Results.internalServerError(prettify(content)).as("text/html; charset=utf-8");       
    }

    public static Results.Status unauthorized(Content content) {
        return Results.unauthorized(prettify(content)).as("text/html; charset=utf-8");      
    }

    private static String prettify(Content content) {
        HtmlCompressor compressor = new HtmlCompressor();
        String output = content.body().trim();

        if (Play.isDev()) {
            compressor.setPreserveLineBreaks(true);
        }

        output = compressor.compress(output);

        return output;
    }
}

然后每个控制器都应该扩展PrettyController

票数 17
EN

Stack Overflow用户

发布于 2013-06-30 01:13:31

我为Play 2.1发布了一个Google HTML Compressor插件。你可以在GitHub上找到它。

票数 8
EN

Stack Overflow用户

发布于 2013-01-04 19:24:38

当然,总是有一些选项:),裁剪主体并再次设置头部(因为在对字符串进行操作后,它将作为text/plain返回):

代码语言:javascript
运行
复制
// instead of
return ok(index.render("some"));

// use
return ok(index.render("some").body().trim()).as("text/html; charset=utf-8");

对于‘美容’循环,或者如果你需要写更紧凑的代码

代码语言:javascript
运行
复制
// instead of
@for(test <- tests) {
  <li>@test.name</li>
}

// use
@for(test <- tests) {<li>@test.name</li>}

最后,你可以使用一些压缩器(即,com.googlecode.htmlcompressor)到...缩小整个页面(在此示例中仅适用于生产模式)

代码语言:javascript
运行
复制
String output = index.render("some").body().trim();
if (Play.isProd()) output = compressor.compress(output);
return ok(output).as("text/html; charset=utf-8");
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14154671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档