繁体   English   中英

恐慌:打开模板/base.html:系统找不到指定的路径

[英]panic: open templates/base.html: The system cannot find the path specified

通过 shadynasty.biz/blog/2012/07/30/quick-and-clean-in-go 链接,我正在尝试在 Go 编程中创建模板。 我的项目结构是使用 Go-SDK 谷歌应用引擎创建的。 google_appengine/myapp/hello/hello.go 文件存在,那么在哪里创建模板文件夹? 我在“hello”文件夹中创建了“template”文件夹,但收到错误“panic:打开模板/base.html:系统找不到指定的路径”并且服务器停止运行。 可以做什么?

实际上,您确实可以访问放入应用程序文件夹的几乎所有文件。

您可以使用 ioutil 读取文件: http ://golang.org/pkg/io/ioutil/#ReadFile

需要注意的一点是,您只能读取 app.yaml 中未由静态处理程序指定的文件。

因此,请将您的模板文件保存在一个文件夹中,并将您的静态和直接提供的文件保存在另一个文件夹中。

仅当您传递 html from 字段时,才能在 appengine 上使用模板,因为 appengine 规则您无权访问文件系统

这是一个例子

const loginTemplateHTML = `<html>
  <body>
    <form action="/login" method="post">
      <div><input name="username" type="text" /></div>
      <div><input name="password" type="password" /></div>
      <div><input type="submit" value="login"></div>
    </form>
  </body>
</html>
    `    
var loginTemplate = template.Must(template.New("Login").Parse(loginTemplateHTML))

func login (w http.ResponseWriter, r *http.Request) {
    if err := loginTemplate.Execute(w,nil); err != nil {
         http.Error(w, err.Error(), http.StatusInternalServerError)
    }
}

问题是应用引擎不会像 go run hello.go 那样调用您的应用程序。 它从根目录调用 go run google_appengine/myapp/hello/hello.go。 您有两种解决方案可以解决此问题。

  1. 重新定义从根目录调用的路径。

我推荐和验证的工作只是设置添加从项目根目录到模板文件夹的路径。 例如,如果项目的根目录是 myRepo/,而 webapp 的路径是 /myRepo/webapp/hello.go,那么模板现在位于 webapp/templates/index.html 而不是 templates/index.html。 为了类似于应用引擎调用它,您将从根目录调用它。 去运行 webapp/main.go。

  1. 在 app.yaml 中定义自定义入口点。

我还没有验证这个解决方案,但我认为它会起作用。 在 app.yaml 中,有一个 entrypoint 命令是用来启动代码的命令。

入口点: cd myRepo/webapp/ && go run main.go

这是 app.yaml 的文档。 确保为您的静态目录添加网址。

https://cloud.google.com/appengine/docs/standard/go/config/appref

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM