2011-12-22 14 views
2

私はゴランではかなり新しいです。ここでテンプレートレンダリングの結果を得る方法

は私の問題である:ここに私のコードであり、それはいないようだ私はtemplate.Executeの文字列の結果を取得したい、と私はhttp.ResponsWriter

に直接それを実行する必要はありませんうまく

package main 

import (
    "fmt" 
    "os" 
    "template" 
) 

type ByteSlice []byte 

func (p *ByteSlice) Write(data []byte) (lenght int, err os.Error) { 
    *p = data 
    return len(data), nil 
} 

func main() { 
    page := map[string]string{"Title": "Test Text"} 
    tpl, _ := template.ParseFile("test.html") 
    var b ByteSlice 
    tpl.Execute(&b, &page) 
    fmt.Printf(`"html":%s`, b) 
} 

そしてtext.html動作するように:

<html> 
<body> 
    <h1>{{.Title|html}}</h1> 
</body> 
</html> 

をしかし、私が得たものは

です
"html":</h1> 
</body> 
</html> 

答えて

5

ByteSliceの書き込みメソッドはバグです。すでに書き込まれたものに新しいデータを追加する必要がありますが、あなたのバージョンは既に書き込まれたデータを置き換えます。テンプレートコードはWriteを複数回呼び出すので、最後に書かれたものだけが印刷される可能性があります。

ByteSliceを作成する代わりに、bytes.Bufferを使用してください。

関連する問題