2013-07-06 5 views
5

空白の制御に問題があり、まだhtml/templateのテンプレートを読み込み可能な形式でフォーマットしています。html/templateのアクション後に空白を制御する方法はありますか?

layout.tmpl

{{define "layout"}} 
<!DOCTYPE html> 
<html> 
     <head> 
       <title>{{.title}}</title> 
     </head> 
     <body> 
       {{ template "body" . }} 
     </body> 
</html> 
{{end}} 

body.tmpl

{{define "body"}} 
{{ range .items }} 
{{.count}} items are made of {{.material}} 
{{end}} 
{{end}} 

コード

package main 

import (
    "os" 
    "text/template" 
) 

type View struct { 
    layout string 
    body string 
} 

type Smap map[string]string 

func (self View) Render(data map[string]interface{}) { 
    layout := self.layout + ".tmpl" 
    body := self.body + ".tmpl" 
    tmpl := template.Must(template.New("layout").ParseFiles(layout, body)) 
    tmpl.ExecuteTemplate(os.Stdout, "layout", data) 
} 

func main() { 
    view := View{ "layout", "body" } 
    view.Render(map[string]interface{}{ 
     "title": "stock", 
     "items": []Smap{ 
      Smap{ 
       "count": "2", 
       "material": "angora", 
      }, 
      Smap{ 
       "count": "3", 
       "material": "wool", 
      }, 
     }, 
    }) 
} 

しかし、それが生成する(注意:上記の行があると私のテンプレートは次のように気にいらを見ますdoctype):

私が欲しいもの

がある:他のテンプレート言語で

<!DOCTYPE html> 
<html> 
    <head> 
     <title>stock</title> 
    </head> 
    <body> 
2 items are made of angora 
3 items are made of wool 
    </body> 
</html> 

私は

[[- value -]] 

のようなものを言うことができ、アクションの前と後の空白が取り除かれますが、私は何も表示されません。 html/templateのように。これは本当に私のテンプレートを次のように読めないようにしなければならないということですか?

layout.tmpl

{{define "layout"}}<!DOCTYPE html> 
<html> 
    <head> 
     <title>.title</title> 
    </head> 
    <body> 
{{ template "body" . }} </body> 
</html> 
{{end}} 

body.tmpl

{{define "body"}}{{ range .items }}{{.count}} items are made of {{.material}} 
{{end}}{{end}} 

答えて

1

はい、空白文字や線は文字通り翻訳されます。 {{define}}だけで出力を生成しない行があれば、解析されたファイルに空行があります。

テンプレートを使用しているため、理想的には、解析された出力を表示または編集する必要はありません。参考までに、JSP/JSFを使用し、それがあなたに与える醜い出力を見てください。オンラインのほとんどのページのソースを見ると、彼らも醜いです。

幸運を祈る!

2

Whitespaceは、この場合、ユーザーのブラウザでレンダリングされた出力に違いがないため、おそらく美学の上にはほとんど意味がありません。

別の言い方をすれば、好きなように書式設定されたテンプレート(部分的にうまく書式設定されたHTML)を入れることができます。既存のフォーマッタのいずれかを使用して、HTMLを1つまたは後処理します。

5

あなたが行くので、空白コントローラ

{{range .foos -}} // eats trailing whitespace 
    <tr><td>do something</td></tr> 
{{- end}} // eats leading whitespace (\n from previous line) 
+0

を使用することができます '1.6' https://golang.org/doc/go1.6#template – webwurst

+0

はい、1.6前@webwurstありがとう、あなたは、HTTPSを確認することができます://golang.org/pkg/text/template/#hdr-Text_and_spaces – hkulekci

+0

これは 'text/template'のみで、' html/template'では動作しません。 –

関連する問題