json数据映射到html,在GoLang中将Json数据映射到Html模板

我正在循环我的API响应并将其添加到这样的html模板,

// Following sends same information as above to the browser as html

t, err := template.New("TopMovies").Parse(`

{{define "TopMovies"}}

{{$ImgUrl := "http://image.tmdb.org/t/p/w185" }}

{{range $movies := .Results}}

{{$ImgUrl}}{{$movies.PosterPath}}{{$movies.Adult}}{{$movies.Overview}}{{$movies.ReleaseDate}}{{$movies.GenreIds}}{{$movies.Id}}{{$movies.OriginalTitle}}{{$movies.OriginalLanguage}}{{$movies.Title}}{{$ImgUrl}}{{$movies.BackdropPath}}{{$movies.Popularity}}{{$movies.VoteCount}}{{$movies.Video}}{{$movies.VoteAverage}}

{{end}}

{{end}}

`)

err = t.ExecuteTemplate(w, "T", p) // This writes the client response

}

我的印象是我应该可以在我这样的html模板中调用它,

{{.TopMovies}}

但是当我运行应用程序时,数据不会显示在我调用它的html页面中.我在这里缺少什么?

我创建了这样的结构,

//A Page structure

type Page struct {

Title string

TopMovies string

}

然后我像这样创建我的手柄,

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

res, err := http.Get(url)

if err != nil {

panic(err)

}

defer res.Body.Close()

body, err := ioutil.ReadAll(res.Body)

if err != nil {

panic(err)

}

var p Payload

err = json.Unmarshal(body, &p)

if err != nil {

panic(err)

}

// Following sends same information as above to the browser as html

t, err := template.New("TopMovies").Parse(`

{{define "TopMovies"}}

{{$ImgUrl := "http://image.tmdb.org/t/p/w185" }}

{{range $movies := .Results}}

{{$ImgUrl}}{{$movies.PosterPath}}{{$movies.Adult}}{{$movies.Overview}}{{$movies.ReleaseDate}}{{$movies.GenreIds}}{{$movies.Id}}{{$movies.OriginalTitle}}{{$movies.OriginalLanguage}}{{$movies.Title}}{{$ImgUrl}}{{$movies.BackdropPath}}{{$movies.Popularity}}{{$movies.VoteCount}}{{$movies.Video}}{{$movies.VoteAverage}}

{{end}}

{{end}}

`)

err = t.ExecuteTemplate(w, "T", p) // This writes the client response

}

然后在main.go

http.HandleFunc("/TopPicks", TopMoviesHandler)

TopPicks.html

{{define "TopPicks"}}

{{template "header" .}}

{{.TopMovies}}

{{template "footer" .}}

{{end}}

这是什么工作,

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

display(w, "about", &Page{Title: "About"})

}

我可以用与前面提到的相同的方式为页面添加标题但是使用display()

并在HTML模板中

{{.Title}}

我怎样才能为json响应做这项工作?

最佳答案 看起来你正在做{{define“body”}},但后来要求ExecuteTemplate执行“T”,它没有在任何地方定义.

我想你想:t.ExecuteTemplate(w,“body”,p)

总而言之,如果您只想使用多个模板,可以通过创建主顶级模板,然后将所有部件解析为子模板来实现.

这是一个例子(on Play).

轻松更改以遍历文件系统并加载所有模板,然后只需执行与http.Request路径匹配的模板.

package main

import "html/template"

import "os"

import "log"

var mainText = `

Normal page stuff

{{ template "_header_" . }}

{{ template "body" . }}

`

var bodyText = `

Body has: {{ .Thing }}

`

var headerText = `

I am header text

`

type Stuff struct {

Thing string

}

func main() {

t := template.New("everything")

// parse all templates you may want

template.Must(t.New("/").Parse(mainText))

template.Must(t.New("_header_").Parse(headerText))

template.Must(t.New("body").Parse(bodyText))

if err := t.ExecuteTemplate(os.Stdout, "/", Stuff{"I am a thing"}); err != nil {

log.Fatal("Failed to execute:", err)

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值