V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
sciel
V2EX  ›  Go 编程语言

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

  •  
  •   sciel · 2022-02-16 15:52:32 +08:00 · 1096 次点击
    这是一个创建于 1003 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    如果将 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>
    
    4 条回复    2022-02-17 20:53:04 +08:00
    MeetTheFuture
        1
    MeetTheFuture  
       2022-02-17 09:43:26 +08:00
    templates/**/*
    sciel
        2
    sciel  
    OP
       2022-02-17 11:01:04 +08:00
    @MeetTheFuture what? `{{template "/nav" .}}` 加路径吗? 也不行的。

    如果不能用 define 只能用 include ,用 include 就必须新创建一个文件。。
    Gota
        3
    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
        4
    sciel  
    OP
       2022-02-17 20:53:04 +08:00
    @Gota 谢谢哈,后面去试试,暂时用 include 了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1138 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 19:05 · PVG 03:05 · LAX 11:05 · JFK 14:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.