staffID
@staffID

No such template «content»?

Есть шаблон со строкой:
{{ template "content" . }}
Проблема в том, что этот шаблон не всегда существует.
Есть какая-нибудь штука типо:
{{ if template "content" . }}
{{ template "content" . }}
{{end}}
  • Вопрос задан
  • 186 просмотров
Решения вопроса 1
Вы можете написать свою функцию для этого: https://play.golang.org/p/l6MIC1ZHZA

package main

import (
	"bytes"
	"fmt"
	"html/template"
	"log"
)

type Data struct {
	Name string
}

func main() {

	var tmpl *template.Template
	funcMap := template.FuncMap{
		"executeIfExists": func(name string, data interface{}) template.HTML {
			t := tmpl.Lookup(name)
			if t == nil {
				return ""
			} else {
				buf := bytes.NewBuffer([]byte{})
				err := t.Execute(buf, data)
				if err != nil {
					log.Printf("Error executing template '%s': %v", name, err)
					return ""
				} else {
					return template.HTML(buf.Bytes())
				}
			}
		},
	}

	tmpl = template.Must(template.New("main").Funcs(funcMap).
		Parse(`Content: {{ executeIfExists "content" . }}  {{ executeIfExists "someAbsentTemplate" . }}`))
	tmpl = template.Must(tmpl.New("content").Parse(`Hello, <b>{{ .Name }}</b>!`))

	data := Data{
		Name: "John",
	}

	buf := bytes.NewBuffer([]byte{})
	err := tmpl.ExecuteTemplate(buf, "main", data)
	if err != nil {
		log.Fatal(err)
	}

	fmt.Println(string(buf.Bytes()))
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
10 мая 2024, в 03:40
1500 руб./за проект
10 мая 2024, в 03:02
5000 руб./за проект
10 мая 2024, в 02:29
300 руб./за проект