templates - Go模板遍及结构的结构

标签 templates go struct

我正在尝试遍历一个由 2 个结构组成的结构列表。我在结构中正确填充数据没有问题,问题是当我尝试将其呈现为 HTML 时。我无法显示任何内容。

这是我的第一个 go web 项目,我正在开发一个为小型企业销售汽车的网站。我的数据库设计为 1..M 的汽车图片。所以在汽车主页上。我只想加载一张包含汽车细节的照片。我尝试为此使用 map ,但当我只想打印出 1 张图片以与通用 ID 上的正确汽车详细信息一起使用时遇到了问题。因此,我认为使用第三个结构可以为每个 ID 提取一张图片。

type Car struct {
    Id int
    Year, Make, Model, Price string
}

type Pics struct {
    Id int
    Path string
}


type CarDetail struct {
    Cars Car
    Pic Pics
}

func cars(w http.ResponseWriter, r *http.Request){
  //loads all the cars in the database
  cars := loadCars()
  carDetails := make([]CarDetail,0)
  carIds := make([]int,len(cars))
  for i := 0; i < len(cars); i++{
    //gets all the car IDs in the db
    carIds[i] = getCarID(cars[i]) 
    photoPath := loadSinglePhoto(carIds[i]) //now have the single photo
    n := CarDetail{Cars:cars[i],Pic:photoPath}
    carDetails = append(carDetails, n)
}

fmt.Println(carDetails) //getting car details the way I want
tpl.ExecuteTemplate(w, "cars", &carDetails)
}

在我传入结构之前的 print 语句以我想要的方式提供了信息。

[{{20 2009 本田雅阁 5000} {20 public/pics/questionMark.jpg}} {{21 2009 讴歌 TLX 14000} {21 public/pics/kia.png}} {{22 2015 起亚狮跑 34000} {22 public/pics/kia.png}}]

现在当我尝试在 html 中呈现它时

{{range .}}
  <h3>{{.Cars.Make}} - {{.Cars.Model}} - {{.Cars.Year}}</h3>
  <img src="{{.Pic.Path}}" id="{{.Pic.Id}}">
{{end}}

请随意批评我的代码或提出其他方法。提前致谢!

最佳答案

一些一般性的评论:

  • 你的命名有点误导:Pics 只包含一张图片,不是很多(不是数组或映射);同样适用于 CarDetail.Cars
  • 不知道您使用的是哪个数据库,我建议构建一个同时返回汽车和(主要)图片的查询,因为按每辆车查找图片效果不佳
  • 我建议将模板作为文件存储在具有特定扩展名的子文件夹中(例如“cars.gohtml”),然后使用 template.ParseGlob("templates/*.gohtml")

除此之外它应该可以工作,请在此处查看稍微重构的工作示例: https://play.golang.org/p/CPnad9FxaB

那么您自己的代码到底出了什么问题?

关于templates - Go模板遍及结构的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45179681/

相关文章:

c++ - 多次包含命名空间的链接器错误

javascript - @index 在 Handlebars 上不起作用

当我编译新代码时,Go 的 JWT token 过期

c++ - 将数据加载到结构 vector 中

c++ - 模板类方法的默认参数

c++ - 模板编程的可维护性建议和最佳实践

go - 使用 goavro 处理多种类型的解码数据

unit-testing - assert_called_once() 或 assert_called_xyz().... 等效?

c - 如何在 C 中声明指向结构数组的指针

c++ - 在 C++ 中使用标记进行静态结构初始化