как получить результат шаблона-рендеринга - PullRequest
2 голосов
/ 23 декабря 2011

Я совершенно новый в Голанге.

Вот моя проблема: я хочу получить строковый результат шаблона. Выполнить, и я не хочу выполнять его напрямую на 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>

1 Ответ

5 голосов
/ 23 декабря 2011

Метод записи ByteSlice содержит ошибки. Он должен добавить новые данные к уже написанному, но ваша версия заменяет уже записанные данные. Вероятно, код шаблона вызывает функцию «Запись» более одного раза, поэтому в итоге вы печатаете только последнее, что было написано.

Вместо создания ByteSlice используйте bytes.Buffer .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...