英文:
Golang: range through slice and generate HTML table
问题
我有一个字符串切片,我想遍历该切片并使用其中的值创建一个简单的HTML表格。以下是一些示例代码:
var tmpl = `<td>%s</td>`
names := []string{"john", "jim"}
for _, v := range names {
fmt.Printf(tmpl, v)
}
这将产生:
<!-- begin snippet: js hide: false -->
<!-- language: lang-html -->
<td>john</td><td>jim</td>
<!-- end snippet -->
我想将返回的结果用于创建一个HTML表格,或者至少能够将其传递给另一个具有表格结构的HTML模板。有什么想法如何实现这个目标?
英文:
I have a string slice, I'd like to range through the slice and create a simple HTML table with the values. This is some sample code to illustrate:
var tmpl = `<td>%s</td>`
names := []string{"john", "jim"}
for _, v := range names {
fmt.Printf(tmpl, v)
}
This produces:
<!-- begin snippet: js hide: false -->
<!-- language: lang-html -->
<td>john</td><td>jim</td>
<!-- end snippet -->
I'd like to take what's returned and create a HTML table or at least be able to pass it to another HTML template that has the table structure. Any ideas how this can be done?
答案1
得分: 8
以下是创建表格的一种方法:
var tmpl = `<tr><td>%s</td></tr>`
fmt.Printf("<table>")
names := []string{"john", "jim"}
for _, v := range names {
fmt.Printf(tmpl, v)
}
fmt.Printf("</table>")
你也可以使用 html/template 包:
t := template.Must(template.New("").Parse(`<table>{{range .}}<tr><td>{{.}}</td></tr>{{end}}</table>`))
names := []string{"john", "jim"}
if err := t.Execute(os.Stdout, names); err != nil {
log.Fatal(err)
}
我没有足够的能量来回答上面 OP 评论中的问题,所以我会在这里回答。
模板接受一个单一的参数。如果你想要向模板传递多个值,那么创建一个结构体来保存这些值:
var data struct{
A int
Names []string
}{
1,
[]string{"john", "jim"},
}
if err := t.Execute(os.Stdout, &data); err != nil {
log.Fatal(err)
}
在模板中使用 {{.A}} 和 {{.Name}}。
英文:
Here's one way to create a table:
var tmpl = `<tr><td>%s</td></tr>`
fmt.Printf("<table>")
names := []string{"john", "jim"}
for _, v := range names {
fmt.Printf(tmpl, v)
}
fmt.Printf("</table>")
You can also use the html/template package:
t := template.Must(template.New("").Parse(`<table>{{range .}}<tr><td>{{.}}</td></tr>{{end}}</table>`))
names := []string{"john", "jim"}
if err := t.Execute(os.Stdout, names); err != nil {
log.Fatal(err)
}
I do not have enough juice to answer the question in OP's comment above, so I'll answer it here.
A template takes a single argument. If you want to pass multiple values to a template, then create a struct to hold the values:
var data struct{
A int
Names []string
}{
1,
[]string{"john", "jim"},
}
if err := t.Execute(os.Stdout, &data); err != nil {
log.Fatal(err)
}
Use {{.A}} and {{.Name}} in the template.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论