单个 Golang Web 模板中来自数据库的多个表单

Multiple forms from database in a single Golang web template

我正在 Golang 中做我的第一个项目,我正在尝试创建一个包含两个列表的表单以供选择,如下所示:

webpage with a form, it has two lists to choose options from and a text field

但是,如果我想让这些列表从 SQLite 数据库的两个 table 中检索它们的条目,模块“模板”只允许我为每个模板发送一个查询,例如

func Person(w http.ResponseWriter, r *http.Request) {
    db := ConnectDB()
    arrP := GetPerson(db)
    templates.ExecuteTemplate(w, "person", arrP)
}

因此,只有第一个列表会从范围中提取信息(在这种特殊情况下,它将显示 'person' table 中的有效选项,第二个列表将继续显示我自己硬编码的条目。


感谢@Zombo 的回复。为了澄清一些事情,我发布的函数打开了与数据库的连接

db := ConnectDB()

然后它创建 arrP('person' 类型的数组)并调用内置的 templates.ExecuteTemplate()

templates.ExecuteTemplate(w, "person", arrP)

这将呈现“人”html 模板。但是,在同一页面中,我试图放置另一个选择表单来选择 'Service'。如果我尝试

func Person(w http.ResponseWriter, r *http.Request) {
    db := ConnectDB()
    arrP := GetPerson(db)
    arrS := GetService(db)
    templates.ExecuteTemplate(w, "person", arrP, arrS)
}

它会抱怨,因为我传递的参数比预期的要多。因此,只有人员名单才能正确呈现数据库中的信息;但是,服务列表没有任何来源可以提取其条目。

@Zombo 给出了一个简洁的答案,使用 map 我们可以将多个数组传递给模板以呈现多个列表/表格。

map[string]any{“arrP”: arrP, “arrS”: arrS}

然后在.tmpl文件中使用$.arrS