转到结构结构的模板

时间:2017-07-19 01:45:20

标签: templates go struct

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

这是我的首个网络项目,我正在一个网站上为小型企业销售汽车。我的数据库被设计为1..M的汽车到图片。所以在主车页面上。我想加载一张带有汽车细节的图片。我尝试使用地图,但是当我想要打印出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 Honda Accord 5000} {20 public / pics / questionMark.jpg}} {{21 2009 Acura TLX 14000} {21 public / pics / kia.png}} {{22 2015 Kia Sportage 34000} {22 public / pics / kia.png}}]

现在当我尝试在html

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

随意批评我的代码或建议另一种方式。提前谢谢!

2 个答案:

答案 0 :(得分:1)

总体层面的一些评论:

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

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

那么你自己的代码究竟出了什么问题?

答案 1 :(得分:0)

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

require_once("../resource/Database.php");
$query ="SELECT username FROM users";
$select = $db->prepare($query);
$select->execute(array());
# You may have a snippet of code that you are missing, but incase not,
# you have to fetch the results while() to iterate or your results. I just
# copied your code and focused on the push, not the fact you didn't fetch
while($rs = $select->fetch(PDO::FETCH_ASSOC)) {
    $names[] = array('name'=>$rs['citynames']);
}

感谢您的帮助和建议!