Golang 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
templates/**/*
更多关于Golang Go语言中模板定义可以在不同路径下使用吗?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
可以手动写个函数载入模板, 就可以按文件名引用了.
默认的载入方式只认文件的 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/template
和text/template
包提供了灵活的方式来处理模板,包括从文件系统中加载模板。
要在不同路径下使用模板,你可以使用template.ParseFiles
或template.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语言的模板系统支持从多个路径加载模板,只需确保正确解析和引用这些模板文件即可。