登录
首页 >  Golang >  Go问答

template.ParseGlob() 可以解析子目录中的模板吗?

来源:Golang技术栈

时间:2023-03-04 17:01:13 422浏览 收藏

本篇文章给大家分享《template.ParseGlob() 可以解析子目录中的模板吗?》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。

问题内容

要清理模板文件夹,我想将常用模板保存在子文件夹中。目前我有以下文件结构:

main.go
templates/index.tpl            # Main template for the main page
templates/includes/head.tpl
templates/includes/footer.tpl

head.tpl并将footer.tpl在内部调用index.tpl,如下所示:

{{ template "head" . }}
    

My content

{{ template "footer" .}}

此外,文件使用template.ParseGlob(). 以下是摘录main.go

var views = template.Must(template.ParseGlob("src/templates/**/*"))

func Render(rw http.ResponseWriter, temp string, data interface{}) {
    err := views.ExecuteTemplate(rw, temp, data)

    if err != nil {
        http.Error(rw, err.Error(), http.StatusInternalServerError)
    }
}

func Index(rw http.ResponseWriter, req *http.Request) {
    Render(rw, "index.tpl", nil)
}

每次打开浏览器时,都会收到以下错误消息:html/template: "index.tpl" is undefined.

有没有可能,这index.tpl被这个 glob 模式忽略了?我发现[了这个](http://grokbase.com/t/gg/golang- nuts/137tj3axkn/go-nuts-template-parseglob-pattern-to-parse-all-files-in-a- directory-recursively)类似的问题,但答案只是一种解决方法。

正确答案

不,它不能。

这里的文档很清楚: Globbing for template.ParseGlobworks like in filepath.Globand filepath.Globuses the syntax of filepath.Match( https://godoc.org/path/filepath#Match ) which has no **for a deep match.

(仔细阅读文档 真的很有帮助。)

本篇关于《template.ParseGlob() 可以解析子目录中的模板吗?》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>