The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
apple2026

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

  •  
  •   apple2026 · Feb 16, 2022 · 1578 views
    This topic created in 1587 days ago, the information mentioned may be changed or developed.

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

    如果将 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 replies    2022-02-17 20:53:04 +08:00
    MeetTheFuture
        1
    MeetTheFuture  
       Feb 17, 2022
    templates/**/*
    apple2026
        2
    apple2026  
    OP
       Feb 17, 2022
    @MeetTheFuture what? `{{template "/nav" .}}` 加路径吗? 也不行的。

    如果不能用 define 只能用 include ,用 include 就必须新创建一个文件。。
    Gota
        3
    Gota  
       Feb 17, 2022
    可以手动写个函数载入模板, 就可以按文件名引用了.
    默认的载入方式只认文件的 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
    }

    ```
    apple2026
        4
    apple2026  
    OP
       Feb 17, 2022
    @Gota 谢谢哈,后面去试试,暂时用 include 了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5373 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 53ms · UTC 09:34 · PVG 17:34 · LAX 02:34 · JFK 05:34
    ♥ Do have faith in what you're doing.