Этот метод встраивания кода непосредственно в шаблон можно использовать только с интерпретируемыми языками, такими как Ruby и PHP. Пакеты шаблонов Go поддерживают несколько простых инструкций (если, иначе, диапазон и т. д. — см. здесь детали), но этот синтаксис и близко не подходит к полноценному языку сценариев - вероятно, он тоже не предназначен. Вы можете вызывать такие методы, как ваш метод to_json
, из шаблонов. Однако (как справедливо заметил twotwotwo) вам может даже не понадобиться дополнительный метод для преобразования ваших данных в JSON — если вы поместите его между тегами <script>
, Go выполнит преобразование самостоятельно. Чтобы настроить преобразование, реализуйте интерфейс Marshaler
, предоставив метод MarshalJSON
, как описано здесь.
В следующем примере демонстрируется прямой вывод структуры в контексте "сценария" и использование метода:
package main
import (
"html/template"
"log"
"os"
"strings"
)
type Greeter struct {
Repeat int
Salutation string
}
func (g Greeter) Perform() string {
return strings.Repeat(g.Salutation+" ", g.Repeat)
}
func main() {
sayHi := Greeter{Repeat: 3, Salutation: "Hi!"}
tmpl, err := template.New("").Parse("{{.}}\n<script>{{.}}</script>\n{{.Perform}}")
if err != nil {
log.Fatalf("Parse: %v", err)
}
tmpl.Execute(os.Stdout, sayHi)
}
http://play.golang.org/p/f3HShZfd6H
Выход:
{3 Hi!}
<script>{"Repeat":3,"Salutation":"Hi!"}</script>
Hi! Hi! Hi!
Revel основывается на пакетах шаблонов Go, а не реализует собственную систему шаблонов, поэтому вышеизложенное применимо и к Revel.
person
rob74
schedule
24.11.2014