шаблон: это неполный или пустой шаблон - PullRequest
0 голосов
/ 31 марта 2020

У меня есть следующий фрагмент кода, в котором я пытаюсь отправить электронное письмо, используя gopkg.in/gomail.v2. Я вполне могу отправить электронное письмо, когда шаблон электронной почты помещен в каталог root проекта, например,

./
    main.go
    template.html


// Info defines
type Info struct {
    Age  int
    Name string
}

func (i Info) sendMail() {
    fp := filepath.Join("template.html")

    t := template.New(fp)

    var err error
    t, err = t.ParseFiles(fp)
    if err != nil {
        log.Println(err)
    }

    var tpl bytes.Buffer
    if err := t.Execute(&tpl, i); err != nil {
        log.Println(err)
    }

    result := tpl.String()
    // ... email sending logic
}

func main() {
    info := &Info{
        Name: "name 1",
        Age:  20,
    }

    info.sendMail()
}

, но когда я изменяю каталог шаблона на emails/template.html и меняю путь к файлу
fp := filepath.Join("emails", "template.html")
, тогда я получаю ошибку от t.Execute()
template: "emails/template.html" is an incomplete or empty template

Я также пытался fp, _ := filepath.Abs("emails/template.html") , но получил ошибку

template: "/mnt/data/go/test/emails/template.html" is an incomplete or empty template указанный путь верен, хотя.

1 Ответ

0 голосов
/ 31 марта 2020

Я изменил

if err := t.Execute(&tpl, i); err != nil {
        log.Println(err)
    }

на


if err := t2.ExecuteTemplate(&tpl, "template.html", i); err != nil {
        log.Println(err)
    }

, и это сработало

Если я хочу использовать t.Execute(&tpl, i) вместо этого, тогда я должен указать шаблоны имя в качестве имени файла при создании шаблона

t := template.New("template.html")

...