当前位置: 首页 > 面试题库 >

转到:为template.ParseFiles指定模板文件名

太叔灿
2023-03-14
问题内容

我当前的目录结构如下所示:

App
  - Template
    - foo.go
    - foo.tmpl
  - Model
    - bar.go
  - Another
    - Directory
      - baz.go

该文件foo.go用于ParseFiles在期间读入模板文件init

import "text/template"

var qTemplate *template.Template

func init() {
  qTemplate = template.Must(template.New("temp").ParseFiles("foo.tmpl"))
}

...

单元测试foo.go按预期工作。但是,我现在正在尝试对其进行单元测试,bar.go并且baz.go都将其导入,foo.go并且在尝试打开时会感到恐慌foo.tmpl

/App/Model$ go test    
panic: open foo.tmpl: no such file or directory

/App/Another/Directory$ go test    
panic: open foo.tmpl: no such file or directory

我尝试将模板名称指定为相对目录(“ ./foo.tmpl”),完整目录(“〜/ go / src / github.com / App / Template
/ foo.tmpl”),相对于应用程序目录(“
/App/Template/foo.tmpl”)和其他选项,但两种情况似乎都无效。单元测试失败或者bar.gobaz.go(或两者)。

我的模板文件应该放在哪里,应该如何调用,ParseFiles以便无论我go test从哪个目录调用都可以始终找到该模板文件?


问题答案:

实用提示:

使用os.Getwd()filepath.Join()查找相对文件路径的绝对路径。

// File: showPath.go
package main
import (
        "fmt"
        "path/filepath"
        "os"
)
func main(){
        cwd, _ := os.Getwd()
        fmt.Println( filepath.Join( cwd, "./template/index.gtpl" ) )
}

首先,我建议该template文件夹仅包含用于演示的模板,而不包含go文件。

接下来,为了简化工作,仅运行根项目目录中的文件。这将有助于使文件路径与嵌套在子目录中的所有go文件保持一致。相对文件路径从当前工作目录(即从中调用程序的位置)开始。

显示当前工作目录中更改的示例

user@user:~/go/src/test$ go run showPath.go
/home/user/go/src/test/template/index.gtpl
user@user:~/go/src/test$ cd newFolder/
user@user:~/go/src/test/newFolder$ go run ../showPath.go 
/home/user/go/src/test/newFolder/template/index.gtpl

对于测试文件,您可以通过提供文件名来运行单个测试文件

go test foo/foo_test.go

最后,使用基本路径和path/filepath包来形成文件路径。

例:

var (
  basePath = "./public"
  templatePath = filepath.Join(basePath, "template")
  indexFile = filepath.Join(templatePath, "index.gtpl")
)


 类似资料:
  • 问题内容: 如何使用POI API或Docx4j将“ .dotx” Word模板转换为普通的“ .docx”? 问题答案: 需要将内容类型从更改为。 使用示例:

  • 问题内容: 在(和)包中,具有以下签名: 到底是干什么用的?我已经扫描了文档(还有一些资料),但无济于事。我只是用一个空字符串实例化所有模板,这似乎没有什么不同。我为什么要打扰一个名字? 即使是命名模板,两者似乎是等效的: https://play.golang.org/p/wKzCHdLf2S 问题答案: 毫无疑问,模板的名称就是为模板 命名 。 到底有什么好处呢?只要您不想 引用 该模板,就没

  • 我试图通过Django制作一个新网站的主页。我的应用程序名称是“博客”,主页是home.html当我去http://127.0.0.1:8000/blog/home/时,我仍然收到错误模板不存在 我确保在settings.py中将“blog”添加到我的模板中,并在主目录中以及通过blog/templates/blog/home.html添加文件夹模板 myproject/blog/views.py

  • 我有以下bean配置 以下函数用于发送解析模板和发送电子邮件。 但这会给出一个FileNotFound异常。

  • 问题内容: 当我尝试使用和时,它注意到Go模板很奇怪。以下代码按预期工作: 但是,当我尝试将模板放在文件中时,它不起作用(说:): 使用template.html: 知道为什么吗?这是一个错误吗?有没有更简单的方法在模板中使用方法/功能? 问题答案: ParseFiles可能会使用更好的文档。一个模板对象可以包含多个模板,每个模板都有一个名称。如果查看ParseFiles的实现,则会看到它使用 文

  • 我已经使用CPT插件创建了一个自定义的post类型产品,然后我创建了三个自定义分类法,用于添加新产品,比如品牌、用法和类型。 我试图实现的是有一个页面,其中列出了自定义分类法中的所有术语,单击该分类法,您将进入一个单独的术语页面,该页面列出了使用该术语标记的所有产品。最后,单击一个产品会将您带到单个产品页面。 基本上我想要这个:家- 这对我来说都是全新的和未知的。我是用分类法发现的。php为我的分