赞
踩
这个异常一般是因为在使用 template.New("xxx.html") 时这里的名称非真实存在的视图文件名导致, 这个地方有点坑, 明明ParseFiles函数已经指定了视图路径了,而这里的New里面的名字居然还必须是你后面指定的视图路径中的文件名!
解决方法就是将 template.New("xxx.html") 这里的xxx.html改为你的真实存在的视图文件的名称。 注意必须是包含后缀的文件名
导致这个问题的原因是Template里面的这escape方法,代码如下:
-
- // escape escapes all associated templates.
- func (t *Template) escape() error {
- t.nameSpace.mu.Lock()
- defer t.nameSpace.mu.Unlock()
- t.nameSpace.escaped = true
- if t.escapeErr == nil {
- if t.Tree == nil {
- return fmt.Errorf("template: %q is an incomplete or empty template", t.Name())
- }
- if err := escapeTemplate(t, t.text.Root, t.Name()); err != nil {
- return err
- }
- } else if t.escapeErr != escapeOK {
- return t.escapeErr
- }
- return nil
- }
-
- // Execute applies a parsed template to the specified data object,
- // writing the output to wr.
- // If an error occurs executing the template or writing its output,
- // execution stops, but partial results may already have been written to
- // the output writer.
- // A template may be executed safely in parallel, although if parallel
- // executions share a Writer the output may be interleaved.
- func (t *Template) Execute(wr io.Writer, data any) error {
- if err := t.escape(); err != nil {
- return err
- }
- return t.text.Execute(wr, data)
- }
-
- // ExecuteTemplate applies the template associated with t that has the given
- // name to the specified data object and writes the output to wr.
- // If an error occurs executing the template or writing its output,
- // execution stops, but partial results may already have been written to
- // the output writer.
- // A template may be executed safely in parallel, although if parallel
- // executions share a Writer the output may be interleaved.
- func (t *Template) ExecuteTemplate(wr io.Writer, name string, data any) error {
- tmpl, err := t.lookupAndEscapeTemplate(name)
- if err != nil {
- return err
- }
- return tmpl.text.Execute(wr, data)
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。