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

问题描述 投票:0回答:1

我想解析同一个

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`

我认为错误出在我不知道的

patterns
方法的
ParseFS
参数中。

我的

internal/web/views
目录中有很多html文件,事实上该文件夹中的所有文件都是html文件,每个文件都有一个或多个
{{define}}
类型的模板。

我将不胜感激任何帮助,谢谢

go go-templates
1个回答
0
投票

@Charlie-Tumahai 将此 有关 Go 中的 Glob 模式的文档(官方 Go Package 网站) 归功于他

因此,为了解析同一个

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) // Debugging I finded out that the error is here so the code below is irrelevant
    }
    tmpls.ExecuteTemplate(os.Stdout, "pages/home", nil)
}

我所做的是更多地研究 Glob 模式并学习如何在 Go 中使用它,Go 中的 Glob 模式的制作方式与任何其他语言都不同。

© www.soinside.com 2019 - 2024. All rights reserved.