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

时间:2013-06-18 05:47:44

标签: google-app-engine go

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

3 个答案:

答案 0 :(得分:3)

实际上,您几乎可以访问放在应用程序文件夹中的任何文件。

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

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

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

答案 1 :(得分:0)

使用appengine上的模板只有在你从字段传递html时才有效,因为你无法访问文件系统的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)
    }
}

答案 2 :(得分:0)

问题在于应用程序引擎不会像go run hello.go那样调用您的应用程序。它从根目录中调用,运行google_appengine / myapp / hello / hello.go。您有两种解决此问题的方法。

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

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

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

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

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

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

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