首页 >后端开发 >Golang >如何在 Go App Engine 中实现自动重新加载的分层模板?

如何在 Go App Engine 中实现自动重新加载的分层模板?

Linda Hamilton
Linda Hamilton原创
2024-12-03 07:02:13225浏览

How to Implement Hierarchical Templates with Automatic Reloading in Go App Engine?

Go AppEngine:具有自动重新加载功能的分层模板

问题:

我如何构建Go AppEngine 应用程序中的模板实现:

  • 分层组织
  • 与 HTML 工具的兼容性
  • 开发服务器上自动重新加载模板

潜力挑战:

  • Template.ParseGlob() 不会递归
  • 出于性能原因,不鼓励上传原始文本模板

解决方案:

组织你的 Go AppEngine具有模块化结构的项目,其中每个包都拥有一个 URL 前缀并包含自己的模板。这种方法允许您维护一致的基本模板并在每个包中扩展它。

示例项目结构:

|-- app.yaml
|-- app
|   +-- http.go
|-- templates
|   +-- base.html
+-- github.com
    +-- storeski
        +-- appengine
            +-- products
            |   +-- http.go
            |   +-- templates
            |       |-- list.html
            |       +-- detail.html
            +-- account
                |-- http.go
                +-- templates
                    |-- overview.html
                    |-- notifications.html 

在每个包的 http.go 文件中,为其拥有的 URL 注册处理程序。例如,产品包将处理以 /products 开头的 URL。

在每个包中,将模板存储在“templates”子目录中,并创建一个基本模板(例如 templates/base.html),以便其他模板使用可以扩展。

要在开发服务器上启用自动模板重新加载,请实现自定义函数来监视模板中的更改目录:

func watchTemplates() {
  ticker := time.NewTicker(1 * time.Second)
  for range ticker.C {
    if err := parseTemplates(); err != nil {
      log.Printf("Error parsing templates: %v", err)
    }
  }
}

在主包中,调用 watchTemplates() 定期检查模板更改并重新加载它们。这可确保模板的更新自动反映在您的应用程序中。

以上是如何在 Go App Engine 中实现自动重新加载的分层模板?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn