【问题标题】:template: is an incomplete or empty template模板:是一个不完整或空的模板
【发布时间】:2020-03-31 07:56:09
【问题描述】:

我有以下一段代码,我正在尝试使用gopkg.in/gomail.v2 发送电子邮件。当电子邮件模板像这样放在项目的根目录中时,我完全能够发送电子邮件

./
    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 提到的路径是正确的。

【问题讨论】:

    标签: go go-templates gomail


    【解决方案1】:

    我变了

    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")

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-04
      • 2019-06-21
      • 1970-01-01
      相关资源
      最近更新 更多