Доброго дня.
Как вставить шаблон в шаблон с помощью константы я понял {{template "content"}},
но вот как вставить по переменной не могу понять {{template .content}}.
Пробывал создавать функцию и печатать текст, но все фигурные скобки экранируются. Может как то можно отключить экранирование? Или как поступать в данной ситуации.
Все он понял. А вот ответа ты не понял.
Давай я тебе пожую:
package main
import (
"bytes"
"fmt"
"html/template"
"os"
)
type testStruct struct {
Val1 string
Val2 template.HTML
}
func main() {
external := template.New("external")
external.Parse(`It is a <b>external template</b> and
it is parameter #1 {{.Val1}}, type = string,
and it is parameter #2 {{.Val2}}, type = template.HTML
`)
internal := template.New("internal")
internal.Parse("It is a <i>internal template</i>")
var buffer bytes.Buffer
internal.Execute(&buffer, nil)
param := testStruct{
Val1: buffer.String(),
Val2: template.HTML(buffer.String()),
}
fmt.Printf("It is buffer: %s\n", buffer.String())
external.Execute(os.Stdout, ¶m)
}
Вы безусловно правы и я не смог донести свои мысли. Я хотел найти такой способ, чтобы в эту функцию можно было вставить переменную - {{template .переменная}} не выходя из общей обработки шаблона. А то, что вы предлагаете это обработка по сути двух шаблонов в двух разных местах и потом вставка одного в другой.
Я не отрицаю и ни в коем не сомневаюсь в правильности вашего решения, но в голове вся эта структура выглядела иначе. Наверно нужно будет делать примерно подобное:
tmp.Funcs(template.FuncMap{
"load": func(s interface{}) interface{}{
t := tmp.Lookup("content")
var b bytes.Buffer
t.Execute(&b, s)
return b.String()
},
})
Ambrosian, Перечитал свой же вопрос.
Да был не прав. Вопрос получился про экранирование, хотя подразумевал другое. И так получается, про экранирование вы ответили, а я и не этого ответа вовсе ждал... =)
Но тем не менее благодарю за участие.