Golang Go语言中模板定义可以在不同路径下使用吗?

发布于 1周前 作者 sinazl 来自 Go语言

Golang Go语言中模板定义可以在不同路径下使用吗?

我试过好像只能在当前目录下使用,

如果将 define 定义的模板放到其他文件夹 如何使用呢?

下面代码中,如果将两个文件放到同一目录下是可以使用的,但在不同文件夹中就不能使用了,请问这要如何做呢?

文件位置:tempalte/meta.html

{{define “meta”}} <head> <meta charset=“UTF-8”> <title>Hello</title> <link rel=“stylesheet” href="/resource/css/globals.css"/> </head> {{end}}

文件位置:template/sys/menu.html   

<!DOCTYPE html>
<html lang="en">
{{template "meta" .}}
<body>
</body>
</html>

更多关于Golang Go语言中模板定义可以在不同路径下使用吗?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

5 回复

templates/**/*

更多关于Golang Go语言中模板定义可以在不同路径下使用吗?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


what? {{template "/nav" .}} 加路径吗? 也不行的。

如果不能用 define 只能用 include ,用 include 就必须新创建一个文件。。

可以手动写个函数载入模板, 就可以按文件名引用了.
默认的载入方式只认文件的 baseName, 同名的会被覆盖掉.


go<br>func New(root fs.FS, plugins ...Plugin) (_ Template, err error) {<br> tmpl := template.New(".")<br><br> names, err := fs.Glob(root, "*.tmpl")<br> if err != nil {<br> return nil, err<br> }<br><br> for _, name := range names {<br> var data []byte<br> if data, err = fs.ReadFile(root, name); err != nil {<br> return<br> }<br> if tmpl, err = tmpl.New(name).Parse(string(data)); err != nil {<br> return<br> }<br> }<br> return tmpl, nil<br>}<br><br>

谢谢哈,后面去试试,暂时用 include 了

在Golang(Go语言)中,模板定义确实可以在不同路径下使用,但需要正确加载和解析这些模板文件。Go语言的html/templatetext/template包提供了灵活的方式来处理模板,包括从文件系统中加载模板。

要在不同路径下使用模板,你可以使用template.ParseFilestemplate.ParseGlob函数。ParseFiles接受一个或多个文件路径的字符串切片,并解析这些文件为模板。而ParseGlob则接受一个符合glob模式的字符串,匹配所有符合该模式的文件并进行解析。

例如,如果你的模板文件分布在不同的目录,你可以这样做:

tmpl, err := template.ParseFiles(
    "path/to/first/template.html",
    "another/path/to/second/template.html",
)
if err != nil {
    log.Fatal(err)
}

// 使用tmpl执行模板渲染

或者使用glob模式:

tmpl, err := template.ParseGlob("**/templates/*.html")
if err != nil {
    log.Fatal(err)
}

// 使用tmpl执行模板渲染

注意,当使用相对路径时,它们是相对于程序的工作目录(通常是程序启动时的当前目录)解析的。因此,确保路径正确无误,或者使用绝对路径来避免潜在的路径问题。

总之,Go语言的模板系统支持从多个路径加载模板,只需确保正确解析和引用这些模板文件即可。

回到顶部