日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2025/5/22 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 json数据映射到html,在GoLang中将Json数据映射到Html模板 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

我正在循環(huán)我的API響應(yīng)并將其添加到這樣的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

}

我的印象是我應(yīng)該可以在我這樣的html模板中調(diào)用它,

{{.TopMovies}}

但是當(dāng)我運(yùn)行應(yīng)用程序時(shí),數(shù)據(jù)不會(huì)顯示在我調(diào)用它的html頁(yè)面中.我在這里缺少什么?

我創(chuàng)建了這樣的結(jié)構(gòu),

//A Page structure

type Page struct {

Title string

TopMovies string

}

然后我像這樣創(chuàng)建我的手柄,

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"})

}

我可以用與前面提到的相同的方式為頁(yè)面添加標(biāo)題但是使用display()

并在HTML模板中

{{.Title}}

我怎樣才能為json響應(yīng)做這項(xiàng)工作?

最佳答案 看起來(lái)你正在做{{define“body”}},但后來(lái)要求ExecuteTemplate執(zhí)行“T”,它沒(méi)有在任何地方定義.

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

總而言之,如果您只想使用多個(gè)模板,可以通過(guò)創(chuàng)建主頂級(jí)模板,然后將所有部件解析為子模板來(lái)實(shí)現(xiàn).

這是一個(gè)例子(on Play).

輕松更改以遍歷文件系統(tǒng)并加載所有模板,然后只需執(zhí)行與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)

}

}

總結(jié)

以上是生活随笔為你收集整理的json数据映射到html,在GoLang中将Json数据映射到Html模板的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。