Suy*_*yog 0 google-app-engine templates go
任何人都可以告诉我如何使用GO模板在https://developers.google.com/appengine/docs/java/gettingstarted/usingjsps上编写像guestbook.jsp这样的简单页面?
在我看来,很容易编写一个有效的,但我想知道它是否可以像JSP页面一样简洁地完成.
有两个问题,我不知道如何解决
yng*_*ing 10
我所做的是创建一个结构(我称之为"页面"对象),用我需要的实体填充它,然后在模板中对它们进行操作.
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)
}
Run Code Online (Sandbox Code Playgroud)
模板看起来像这样,使您可以访问结构中的所有字段:
{{define "myPage"}}
{{template "head" .}}
Title: {{.Title}}<br />
Name: {{.User.Name}}<br />
{{template "tail" .}}
{{end}}
Run Code Online (Sandbox Code Playgroud)
(请注意,{{template "head" .}}它将包含另一个模板,此处为页眉和页脚.)
我经常使用的另一件事是模板中的变量.您可以使用美元符号定义变量.
以下示例不是很优雅,但可能会让您了解可能的内容.想象一下,我们有三个切片:一个带有" User"对象,一个带有" Spot"对象,一个带有" Checkin"对象.它们的长度都相同,并且按位置相关(每个索引0包含已签入的用户,他/她签入的地点,以及签入对象包含它发生的时间)."range"将在切片上进行迭代时给出两个变量:index($i在示例中)和值($v).使用"index"可以在切片中请求实体,因此{{$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}}
Run Code Online (Sandbox Code Playgroud)
同样,这个例子不是很优雅,但我希望你能看到在Go中创建动态HTML就像在JSP中一样容易(我的经验是结果页面比JSP更清晰,因此更容易理解经验不足的网络开发者和设计师).
Ex animo,/ Alexander Yngling.