2017-07-19 71 views
0

我正在嘗試範圍內包含2個結構的結構列表。我沒有問題在結構中正確填充數據,問題是當我嘗試將其呈現到HTML中時。我無法顯示任何內容。轉到模板結構的結構的範圍

這是我第一次參加web項目,我正在網站上爲小企業出售汽車。我的數據庫被設計爲1..M的Cars to Pics。所以在主頁上。我想只加載1張圖片的車的細節。我試圖使用地圖,但我遇到了一個問題,當我想打印出只有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 Acura TLX 14000} {21 2015 Kia Sportage 34000 } {22公/圖片/ kia.png}}]

現在,當我試圖使其在HTML

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

,歡迎隨時與我的關鍵代碼或暗示的另一種方式。先謝謝你!

+2

*總是*檢查'ExecuteTemplate'返回的'error'。 'cars'應該是模板名稱而不是變量名稱。可以使用'tpl.Execute(w,&carsDetail)'來代替'ExecuteTemplate'。 – putu

回答

1

在一般水平上的一些言論:

  • 你的命名是有點誤導:照片管理只持有單一的圖片,而不是很多(不是數組或地圖);同樣適用於CarDetail.Cars
  • 不知道你正在使用哪個數據庫我會建議建立一個查詢返回兩輛車和(主)圖片,因爲看每張單車的圖片效果不佳
  • 我會建議存儲模板作爲文件帶有特定擴展名的子文件夾(如「cars.gohtml」),然後使用template.ParseGlob(「模板/ *。gohtml」)

除此之外,它應該工作,在這裏看到一個輕微重構的工作示例: https://play.golang.org/p/CPnad9FxaB

那麼到底什麼是我你的代碼出錯了嗎?

+0

謝謝你的評論。基本上,當我加載頁面時,我沒有在cars.html頁面中看到任何數據。我已經有一個模板文件夾。單個查詢是一個很好的觀點。你會建議添加一個'主'字段只是拉1 pic? 我遇到的問題是它不會呈現任何內容到頁面。它可以工作,如果我嘗試一個單一的,但範圍上的CarDetails列表不是在HTML頁面上顯示任何內容 – Ben

+0

奇怪的是,當我通過一個'CarDetail'列表時,它工作正常,但是當我嘗試從它數據庫,它不起作用。我知道信息在那裏,因爲它在我執行模板之前就打印出來了。即你提供的例子工作正常。但是對於我的例子來說,沒有任何東西會呈現沒有錯誤返回,並加載頁面,只是從服務器端沒有數據。 – Ben

+0

可能去模板沒有遵守HTML註釋,所以也許你的「註釋掉HTML」收到你的數據:)只需再次您的意見,並檢查瀏覽器中呈現頁面的源代碼。 – mhcbinder

0

所以我找到了罪魁禍首。奇怪的是,有些人評論說,早期的HTML代碼導致模板不能被渲染。我不知道爲什麼。

<!-- 

<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}} 

謝謝你的幫助和建議!