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

开始,AppEngine:如何为应用程序构建模板

司空元凯
2023-03-14
问题内容

人们如何在基于Go的AppEngine应用程序中处理模板的使用?

具体来说,我正在寻找一个具有以下功能的项目结构:

  • 模板和部分模板的分层(目录)结构
  • 请允许我在模板上使用HTML工具/编辑器(在xxx.go文件中嵌入模板文本使此操作很困难)
  • 在开发服务器上时自动重新加载模板文本

潜在的绊脚石是:

  • template.ParseGlob()不会递归遍历。
  • 出于性能原因,建议不要将模板作为原始文本文件上传(因为这些文本文件与执行代码位于不同的服务器上)。

请注意,我不是在寻找使用模板包的教程/示例。这更多是一个应用程序结构问题。话虽如此,如果您有解决上述问题的代码,我很乐意看到。提前致谢。


问题答案:

我最喜欢的Go功能之一就是能够轻松地在包内添加处理程序。这大大简化了编写模块化代码的过程。

例如:

档案结构

|-- 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下面的包github.com/storeski/appengine/products将拥有任何以开头的入站URL
/products

使用这种模块化方法,将模板存储在products包中是有益的。如果您希望为站点维护一致的基本模板,则可以在扩展位置建立约定templates/base.html

templates / base.html

<!DOCTYPE HTML>
<html>
  <head>
    <title>{{.Store.Title}}</title>
  </head>

  <body>
    <div id="content">
      {{template "content" .}}
    </div>
  </body>
</html>

_github.com/storeski/appengine/products/templates/list.html_

{{define "content"}}
  <h1> Products List </h1>
{{end}}

_github.com/storeski/appengine/products/http.go_

func init() {
  http.HandleFunc("/products", listHandler)
}

var listTmpl = template.Must(template.ParseFiles("templates/base.html",
  "github.com/storeski/appengine/products/templates/list.html"))

func listHandler(w http.ResponseWriter, r *http.Request) {

  tc := make(map[string]interface{})
  tc["Store"] = Store
  tc["Products"] = Products

  if err := listTmpl.Execute(w, tc); err != nil {
    http.Error(w, err.Error(), http.StatusInternalServerError)
  }
}

这种方法非常令人兴奋,因为它使应用程序/软件包的共享变得微不足道。如果我编写了一个处理身份验证的程序包,则该程序包获取/authURL的所有权。然后,任何将软件包立即添加到其产品根目录的开发人员都具有所有功能。他们要做的就是创建一个基本模板(templates/base.html)并将其用户定向到/auth



 类似资料:
  • 问题内容: 我想开始用Java进行Web开发。我不知道如何开始,学习什么或学习和使用的最佳Web框架是什么。帮帮我? 问题答案: 我认为,您只是Web应用程序的新手,而不是Java本身的新手。 首先,我可以为前端推荐Apache Wicket框架。他们的网站上有很多示例,邮件列表是上手的好地方,而Wicket in Action 是令人愉快的阅读。 如果要使用Java Server Pages(J

  • 问题内容: 我通常在Linux系统上工作,但遇到一种情况,我需要编写一个客户端应用程序,该应用程序可以作为服务在Windows上运行。有人可以帮助我或指导我如何在Windows环境下构建MenuBar应用程序(例如Dropbox),该应用程序从操作系统启动开始,图标位于TaskBar中,然后单击该应用程序图标将显示一个菜单。 我的脚本语言是python。谢谢。 问题答案: 您可以使用pywin32

  • 问题内容: 对于这个问题,我实际上并没有太多的摆动或GUI设计方面的经验(大学中的一些WPF应用程序的水平差不多),但是我的任务是在工作中重构摆动旧式应用程序的一部分。 我被要求重构的部分围绕一个弹出窗口,该窗口可以根据特定的值对象以三种不同的格式显示。这3种不同的格式都共享一些基本字段,然后有条件地确定其他字段。负责此GUI元素的类的长度约为5k,我当时认为应该将其分为三个子类,并在基类中共享这

  • 问题内容: 我正在为NodeJS使用ExpressJS Web框架。 使用ExpressJS的人将他们的环境(开发,生产,测试…),路线等放置在。我认为这不是一个好方法,因为当您拥有大型应用程序时,app.js太大了! 我想要这个目录结构: 这是我的代码: app.js config / environment.js config / routes.js 我的代码运行良好,我认为目录的结构很漂亮。

  • 问题内容: 是否有在 Express.js 应用程序中分解和模块化文件的通用约定?还是将所有内容保存在一个文件中很普遍? 问题答案: 我的分解如下: 我使用Exports返回相关内容。例如,在模型中,我这样做: 然后,如果我需要创建一个电话号码,则非常简单: 如果我需要使用架构,那么 (假设我们正在routes文件夹中工作,需要先上一层然后再下一层模型) 编辑4 该 快递维基 具有建立在它之上的框

  • 问题内容: 我要做的是为我的Java应用程序构建一个docker映像,但是以下注意事项对于大多数编译语言都应适用。 在构建服务器上,我想为应用程序生成一个docker映像作为可交付成果。为此,我必须使用一些构建工具(通常是Gradle,Maven或Ant)来编译应用程序,然后将创建的JAR文件添加到docker映像中。因为我希望Docker映像仅执行JAR文件,所以我当然将从已安装Java的基本映