使用Golang Fiber时无法在HTML模板中遍历数据求助
问题分析与修复
错误原因
- 后端数据传递错误:
words是[]models.Words切片类型,切片本身没有Title和Cover字段,只有切片内的单个models.Words对象才拥有这些字段,直接写words.Title属于语法错误,且传递给模板的是错误的键值对。 - 模板遍历目标错误:模板中用
{{ range . }}遍历根对象,但后端传递的是包含name、cover的 map,遍历 map 时每次迭代的元素是键值对(类型为interface{}),自然无法找到name字段。 - 额外注意:
models.Words的字段必须是首字母大写的导出字段,否则模板无法访问这些字段(Golang 未导出字段以小写开头,外部包/模板无法访问)。
修复代码
后端 ListWords 函数修复
func ListWords(c *fiber.Ctx) error { db := database.DB.Db var words []models.Words // 增加数据库查询错误处理 if err := db.Find(&words).Error; err != nil { return c.Status(fiber.StatusInternalServerError).SendString(err.Error()) } // 将整个words切片传递给模板,键名设为words return c.Render("public/views/getWords.html", fiber.Map{ "words": words, }) }
前端 HTML 模板修复
{{ range .words }} {{ .Title }}-{{ .Cover }} {{ end }}
补充说明
- 确保
models.Words的字段定义为导出形式(首字母大写),例如:type Words struct { Title string // 必须大写 Cover string // 必须大写 // 其他业务字段... } - 增加数据库查询的错误处理,能快速排查数据查询阶段的问题,避免渲染阶段出现模糊错误。
内容的提问来源于stack exchange,提问作者Haroune
相关产品推荐
相关产品推荐

