首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Go模板遍历struct的struct

Go模板遍历struct的struct
EN

Stack Overflow用户
提问于 2017-07-19 09:45:20
回答 2查看 2.1K关注 0票数 0

我试图遍历一个包含2个结构的结构列表。在结构中正确地填充数据没有问题,问题是当我试图将其呈现到HTML中时。我拿不到要展示的东西。

这是我的第一个go网络项目,我正在为一家小企业销售汽车的网站工作。我的数据库被设计成一个从汽车到Pics的1..M。所以在汽车主页上。我只想加载一张照片与汽车的细节。我试着使用地图来解决这个问题,但是我遇到了一个问题,当我想打印出一张图片来匹配公共ID上正确的汽车细节时,所以我想使用第三个结构,我为每个ID拉出一张图片就可以了。

代码语言:javascript
复制
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)
}

就在我传入struct之前的print语句按照我想要的方式给了我信息。

{{202009Honda Accord5000}{20public/questonMark.jpg}}{{212009Acura TLX 14000} {21public/pics/kia.png}}{{222015 Kia Sportage 34000} {22public/pics/kia.png}}

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

代码语言:javascript
复制
{{range .}}
  <h3>{{.Cars.Make}} - {{.Cars.Model}} - {{.Cars.Year}}</h3>
  <img src="{{.Pic.Path}}" id="{{.Pic.Id}}">
{{end}}

请随时批评我的代码,或者提出其他建议。提前谢谢你!

EN

回答 2

Stack Overflow用户

发布于 2017-07-19 17:21:57

下面是一些大体上的说明:

  • 你的命名有点误导:图片只有一张图片,不是很多(不是数组或地图);这同样适用于知道你正在使用哪个数据库的template.ParseGlob("templates/*.gohtml")

。我建议建立一个同时返回汽车和(主要)图片的查询,因为按每辆车查找图片不会有很好的效果

  • 我建议将模板存储为具有特定扩展名的子文件夹中的文件(例如"cars.gohtml"),然后使用template.ParseGlob(“templates/*.gohtml”)

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

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

票数 1
EN

Stack Overflow用户

发布于 2017-07-20 08:20:06

所以我找到了罪魁祸首奇怪的是,之前的一些HTML代码被注释掉了,导致模板无法呈现。我不知道为什么。

代码语言:javascript
复制
<!--

<h1>Your Pictures:</h1>
{{range .Pics}}
<img class="insertedPics" src="{{.Path}}" alt="pic" id="{{.Id}}" 
height="500px" width="500px">
{{end}}

{{range .Cars}}
<h3>{{.Make}} - {{.Model}} - {{.Year}} </h3>
{{end}}

<img src="{{.Pic.Path}}" alt="car pic" id="{{.Car.Id}}" height="600px" width="600px">

-->        <-- Once I removed this, everything worked fine.

{{range .}}
<h3>{{.C.Make}} - {{.C.Model}}</h3>
<img src="{{.P.Path}}" alt="some pic" height="500px" width="500px" 
style="">
{{end}}

感谢您的帮助和建议!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45179681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档