2012-12-31 42 views
5

使用Play 2我正在實現一個簡單的REST API,輸出是純文本。我的模板看起來是這樣的:刪除模板輸出中不必要的換行符?

@(items: Map[String,String]) 
@for((key, value) <- items) { 
@value 
@key 
} 

在控制器:

return ok(views.html.bla.render(itemsMap)).as("text/plain"); 

這給出了以下的輸出:

(empty line) 
(empty line) 
value 
key 
(empty line) 
value 
key 

我想擺脫第2個空行 - 是那可能嗎?

將for放在第一行將刪除頂部的空行之一,但仍然存在一行,因爲第一行會使模板難以閱讀):感謝您的任何提示!

回答

4

首先,如果您使用純文本,你應該使用TXT模板(bla.scala.txt)。他們還自動設置text/plain; charset=utf-8內容類型。

要修剪的內容,可以直接返回所呈現的內容:

return ok(views.txt.bla.render(itemsMap).body().trim()); 

如果你想渲染HTML內容你需要手動更改此:

return ok(views.html.ble.render().body().trim()).as("text/html; charset=utf-8"); 
+0

完美,解決了這個問題:-) Eclipse在render(itemsMap)之後沒有提供任何方法,但.body()。trim()的作用不是那麼低:-)非常感謝! –

+0

@Marius修改HTML的body會導致它返回爲'text/plain',所以我添加了一個正確返回'text/html'的樣本,希望你不介意。 – biesior

+0

其意圖是返回'text/plain',但是...... –

1

如果您從地圖生成純文本輸出,爲什麼您使用視圖呢?他們不提供任何利益在你的情況下。

您可以在純Scala中編寫渲染函數。喜歡的東西

items.map{ case (k,v) => v + '\n' + k}.mkString('\n') 
+0

出色,我應該切換到XML或某種情況。像這樣,生成的格式化內容在我看來仍然更好:-) –

+0

如果切換到XML,則可以使用Scala的XML支持。如果你切換到別的東西 - 比如JSON--你可以使用JSON庫。 Play的模板適合(驚喜!)模板。 –