Go语言 如何使用template.ParseFS函数解析embed.FS模板

pepwfjgg  于 2023-09-28  发布在  Go
关注(0)|答案(1)|浏览(191)

我想解析同一个template.Template结构中的所有模板,但我不知道如何解析,而且它给了我一个错误。我有下一个代码:

package main

import (
    "embed"
    "html/template"
    "log"
    "os"
)

//go:embed internal/web/views/*
var viewsFS embed.FS

func main() {
    tmpls, err := template.New("").ParseFS(viewsFS, "**/*.html")
    if err != nil {
        log.Fatal(err) // Debugging I finded out that the error is here so the code below is irrelevant
    }
    tmpls.ExecuteTemplate(os.Stdout, "pages/home", nil)
}

给出ParseFS方法的错误如下:

$ 2023/09/16 23:36:42 template: pattern matches no files: `**/*.html`

我认为错误在ParseFS方法的patterns参数中,我不知道。
我在internal/web/views目录中有很多html文件,事实上该文件夹中的所有文件都是html文件,每个文件都有一个或多个{{define}}类型的模板。
我将感激任何帮助谢谢

lx0bsm1f

lx0bsm1f1#

@Charlie-Tumahai将这个关于Go中Glob模式的文档(官方Go包网站)归功于他
因此,为了解析同一个template.Template结构中的所有模板,我必须执行以下操作:

package main

import (
    "embed"
    "html/template"
    "log"
    "os"
)

//go:embed internal/web/views/*
var viewsFS embed.FS

func main() {
    tmpls, err := template.New("").
        ParseFS(viewsFS,
            "internal/web/views/*/*.html",
            "internal/web/views/*/*/*.html",
            /* Add more `*` if you have templates that are more nested */
        )
    if err != nil {
        log.Fatal(err)
    }
    tmpls.ExecuteTemplate(os.Stdout, "pages/home", nil)
}

我所做的是更多地研究Glob模式,并学习如何在Go语言中使用它,Go语言中的Glob模式是以一种与其他语言不同的方式构建的。

相关问题