任何人都可以告诉我如何在 https://developers.google.com/appengine/docs/java/gettingstarted/usingjsps 上编写像 guestbook.jsp 这样的简单页面吗?使用 GO 模板?
在我看来,编写一个有效的页面很容易,但我想知道它是否可以像 JSP 页面一样简洁地完成。
有两个问题我不知道如何解决
- JSP 页面使用用户和请求两个对象,而模板创建只需要一个。
- 如果我们使用单独的模板来生成退出链接和留言簿,那么我们如何将它们嵌套在主页中?
最佳答案
我所做的是创建一个结构(我称之为“页面”对象),用我需要的实体填充它,然后在模板中对它们进行操作。
func myPage(w http.ResponseWriter, r *http.Request) {
var user *User // fetch from somewhere
page := struct {
Title string
User *User
}{"My title", user}
return templates.ExecuteTemplate(w, "myPage", page)
}
模板看起来像这样,让您可以访问结构中的所有字段:
{{define "myPage"}}
{{template "head" .}}
Title: {{.Title}}<br />
Name: {{.User.Name}}<br />
{{template "tail" .}}
{{end}}
(注意 {{template "head".}}
将包含另一个模板,这里是页眉和页脚。)
我经常使用的另一件事是模板中的变量。您可以使用美元符号定义变量。
下面的例子不是很优雅,但可以让你知道什么是可能的。假设我们有三个 slice :一个包含“User
”对象,一个包含“Spot
”对象,一个包含“Checkin
”对象。它们的长度都相同,并且按位置相关(每个索引 0 包含签到的用户、他/她签到的地点,签到对象包含签到发生的时间)。 “range”会在遍历 slice 时为您提供两个变量:索引(示例中的 $i
)和值($v
)。使用“索引”,您可以在 slice 中请求实体,因此 {{$user := index $checkinUsers $i}}
将为您提供 $i 指向的位置处的对象。
{{$checkinUsers := .CheckinUsers}}
{{$checkinSpots := .CheckinSpots}}
{{range $i, $v := .Checkins}}
{{$user := index $checkinUsers $i}}
{{$spot := index $checkinSpots $i}}
<tr>
<td>
{{$user.FirstName}} {{$user.LastName}} @ {{$spot.Description}} ({{$v.Time}})<br />
</td>
</tr>
{{end}}
同样,这个例子不是很优雅,但我希望你能看到在 Go 中制作动态 HTML 就像在 JSP 中一样容易(我的经验是生成的页面比 JSP 更干净,因此经验不足的网络开发人员和设计人员更容易理解)。
前辈, /亚历山大英灵。
关于google-app-engine - 动态 html 的 GO 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10959912/