2016-10-29 3 views
0

다음 코드는 HomeTemplate 내부에 하나의 슬라이스를 출력하는 데 완벽하게 작동합니다.템플릿 이동 : 두 개 이상의 슬라이스 범위

main.go 템플릿 포크에서

type Item struct { 
    Id   int 
    Name string 
    Type  string 
} 

var tmpl = template.Must(template.ParseGlob("tmpl/*")) 

func Index(w http.ResponseWriter, r *http.Request) { 

    db := database.DbConn() 

    selDB, err := product.ByID() 
    if err != nil { 
     panic(err.Error()) 
    } 

    i := Item{} 

    resItems := []Item{} 

    for selDB.Next() { 

     var id int 
     var product_name, product_type string 

     err = selDB.Scan(&id, &product_name, &product_type) 
     if err != nil { 
      panic(err.Error()) 
     } 

     i.Id = id 
     i.Name = product_name 
     i.Type = product_type 

     resItems = append(resItems, i) 

    } 

    tmpl.ExecuteTemplate(w, "HomeTemplate", resItems) 

    // Close database connection 
    defer db.Close() 
} 

다음 코드 미세 :

{{ range . }} 
    {{ .Name }}<br /> 
{{ end }} 

이런 식으로 뭔가가 작동하지 않는 이유는 무엇입니까?

{{ range .resItems }} 
    {{ .Name }}<br /> 
{{ end }} 

출력을 두 개 이상 만들려면 어떻게해야합니까? 아니면 변경해야합니까? rang .resItems이 작동하지 않는 이유

, 당신에게

+1

* 내가 할 또는 변경해야 할 것을 출력 두 개 이상의 조각을 원한다면? * 당신은 데이터 구조를 전달할 필요가 무엇'ExecuteTemplate' 다수 포함 할 수 구조체와 같은 데이터 조각. –

+0

관련 항목/가능한 복제본 : [Go 템플릿에 여러 데이터를 전달하는 방법?] (http://stackoverflow.com/questions/35224066/how-to-pass-multiple-data-to-go-template) – icza

답변

0

첫 번째 질문에 감사드립니다.
템플릿에서 .은 현재 항목을 의미합니다. 자바에서 this처럼. 어떤 방향으로 .range과 같으면 range 작동을 의미합니다.
그렇지 않은 경우 양식 ExecuteTemplate()을 전달한 항목을 의미합니다. ExecuteTemplate(w, "HomeTemplate", resItems)처럼 .resItems을 의미합니다. resItems에는 resItems이라는 값이 있으므로 .resItems을 사용할 수 없습니다.

초, 당신은 템플릿에 전달하기 위해 더 많은 조각이있는 경우는 다음과 같이지도에 그들 모두를 추가 할 수 있습니다

t := template.New("test") 
t, _ = t.Parse(` 
test range 
{{range .first}} {{.}} {{end}} 
{{range .second}} {{.}} {{end}} 
`) 
var res = make(map[string]interface{}) 
aa := []string{"first", "second"} 
bb := []string{"123", "456"} 
res["first"] = aa 
res["second"] = bb 
t.Execute(os.Stdout, res) 

// output 
test range 
first second 
123 456 

를 내가 두 배열 AA와 BB가 있고,지도에 추가 그것을 템플릿에 전달하십시오. 템플릿에서 .은지도를 의미하고 .first은 배열 aa를가집니다. 그래서 bb. 이 당신을 도울 수

희망 ...

+0

감사합니다. 이는 필자가 템플릿에 전달해야하는 모든 데이터가지도에 있어야한다는 것을 의미합니다. 맞습니까? – Roberto

+0

예,지도 또는 구조체 – Laily

관련 문제