gpt4 book ai didi

go - 将数据范围传递给 HTML 模板

转载 作者:数据小太阳 更新时间:2023-10-29 03:03:41 25 4
gpt4 key购买 nike

我已将虚拟数据插入数据库。

示例打印函数根据控制台中的代码打印 13 及其正方形。但是我需要将整个数据传递给 HTML 模板(索引),在那里我可以看到一个表格,其中包含所有传递的数字及其各自的平方数。

如何在索引 HTML 中传递这些数据?

数字 x 数字 = SquareNumber
1 x 1 = 1
2×2 = 4
3 x 3 = 9
...等等。

func main() {

db, err := sql.Open("mysql", "root:@/godb")
if err != nil {
panic(err.Error())
}

defer db.Close()

stmtIns, err := db.Prepare("INSERT INTO squarenum VALUES(?, ?, ? )") // ? =
placeholder
if err != nil {
panic(err.Error()) }

defer stmtIns.Close()

stmtOut, err := db.Prepare("SELECT squareNum FROM squareNum WHERE number =
?")
if err != nil {
panic(err.Error())
}

defer stmtOut.Close()

for i := 1; i < 50; i++ {
_, err = stmtIns.Exec(0,i, (i * i))
if err != nil {
panic(err.Error())
}
}

err = stmtOut.QueryRow(13).Scan(&squareNum) // WHERE number = 13
if err != nil {
panic(err.Error()) // proper error handling instead of panic in your app

}
tRes:=pageData{}
tRes.SquareNum=squareNum
fmt.Printf("The square number of 13 is: %d \n", squareNum)


// Query another number.. 1 maybe?
err = stmtOut.QueryRow(1).Scan(&squareNum) // WHERE number = 1
if err != nil {
panic(err.Error()) // proper error handling instead of panic in your app
}
fmt.Printf("The square number of 1 is: %d \n", squareNum)
http.HandleFunc("/",idx)
http.ListenAndServe(":8888", nil)
}

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

pd := pageData{
SquareNum: squareNum,
}

err := tpl.ExecuteTemplate(w, "index.html", pd)
if err != nil {
log.Println("LOGGED", err)
http.Error(w, "Internal server error", http.StatusInternalServerError)
return
}
}

最佳答案

package main

import (
"html/template"
"os"
)

// here is your template
const tplString = `
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>{{.Title}}</title>
</head>
<body>
{{range .Dummies}}
<div>Square of {{.Number}} is {{.Square}}</div>
{{end}}
</body>
</html>
`

var (
tpl *template.Template
err error
)

// the dummydata you talked about
type DummyData struct {
Number int
Square int
}

//some PageData just with dummies and a title
type PageData struct {
Title string
Dummies []*DummyData
}

//here you would be using your sql queries
func createSomeDummies(amount int) []*DummyData {
dummies := make([]*DummyData, amount)
for i := 0; i < amount; i++ {
dd := new(DummyData)
dd.Number = i
dd.Square = i * i
dummies[i] = dd
}
return dummies
}

func main() {
pd := new(PageData)
pd.Title = "Hello Dummies"
pd.Dummies = createSomeDummies(10)

tpl = template.New("index")
tpl, err = tpl.Parse(tplString)
if err != nil {
panic(err)
}
err = tpl.Execute(os.Stdout, pd)
if err != nil {
panic(err)
}
}

此代码段创建一个 PageData 结构来保存虚拟数据条目数组和网页标题。

type PageData struct {
Title string
Dummies []*DummyData
}

然后它使用函数创建 10 个虚拟数据结构。然后将该数组分配给 PageData 的 Dummmies 字段。

pd.Dummies = createSomeDummies(10)

此函数是您的 sql 查询函数的占位符,您只需循环遍历您的 sql 行,而不是像我一样手动创建它们。

func createSomeDummies(amount int) []*DummyData {
dummies := make([]*DummyData, amount)
for i := 0; i < amount; i++ {
dd := new(DummyData)
dd.Number = i
dd.Square = i * i
dummies[i] = dd
}
return dummies
}

模板本身会像这样插入标题: <title>{{.Title}}</title>

Dummies 本身由范围模板指令插入,其工作方式类似于 for 迭代器。需要注意的一件事是,在此循环内,所有数据都指向 DummyData 项而不是 PageData

{{range .Dummies}}
<div>Square of {{.Number}} is {{.Square}}</div>
{{end}}

然后解析模板。错误将停止执行并打印错误消息。

tpl = template.New("index")
tpl, err = tpl.Parse(tplString)
if err != nil {
panic(err)
}

最后模板将被渲染到标准输出。要在 http 处理程序中使用,您必须改用 http.ResponseWriter。错误再次停止执行并打印错误消息。

err = tpl.Execute(os.Stdout, pd)
if err != nil {
panic(err)
}

这里的工作示例: Go Playground

关于go - 将数据范围传递给 HTML 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48148497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com