请问 Golang 模板定义可以在不同路径下使用吗?

2022-02-16 15:52:32 +08:00
 sciel

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

如果将 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>
1030 次点击
所在节点    Go 编程语言
4 条回复
MeetTheFuture
2022-02-17 09:43:26 +08:00
templates/**/*
sciel
2022-02-17 11:01:04 +08:00
@MeetTheFuture what? `{{template "/nav" .}}` 加路径吗? 也不行的。

如果不能用 define 只能用 include ,用 include 就必须新创建一个文件。。
Gota
2022-02-17 20:06:13 +08:00
可以手动写个函数载入模板, 就可以按文件名引用了.
默认的载入方式只认文件的 baseName, 同名的会被覆盖掉.


``` go
func New(root fs.FS, plugins ...Plugin) (_ Template, err error) {
tmpl := template.New(".")

names, err := fs.Glob(root, "*.tmpl")
if err != nil {
return nil, err
}

for _, name := range names {
var data []byte
if data, err = fs.ReadFile(root, name); err != nil {
return
}
if tmpl, err = tmpl.New(name).Parse(string(data)); err != nil {
return
}
}
return tmpl, nil
}

```
sciel
2022-02-17 20:53:04 +08:00
@Gota 谢谢哈,后面去试试,暂时用 include 了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/834266

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX