Шаблоны Google Go для веб-разработки с двумерным массивом - PullRequest
3 голосов
/ 24 ноября 2011

У меня есть пример структуры с двухмерным массивом:

type Foo struct{ testArray[9][9] int }

Я бы хотел получить к нему доступ по шаблону.

Например: tmpl.Execute(w, foo) // foo - указатель на структуру Foo, а w - разобранный html-сайт

Как мне получить доступ к массиву в шаблоне? Для одномерного массива со старым пакетом шаблонов есть код:

{.repeated section testArray} <p>{@}</p> {.end}

но каков синтаксис для двумерного массива? Например, я должен получить доступ к testArray [0] [0]

Ответы [ 2 ]

4 голосов
/ 24 ноября 2011

Я решил вашу проблему случайно с новым пакетом шаблона. Но, возможно, старый работает аналогично. Вы пробовали что-то вроде:

{.repeated section testArray}<p>{.repeated section @}{@} {.end}</p>{.end}

(непроверенные)

В любом случае, вот мое решение с новым пакетом шаблонов. Может быть, вы можете использовать это как-то: D

package main

import (
    "os"
    "text/template"
)

type Foo struct {
    Data [9][9]int
}

func main() {
    tmpl := template.Must(template.New("example").Parse(`
    <table>
    {{range .Data}}
    <tr>
      {{range .}}<td>{{.}}</td>{{end}}
    </tr>
    {{end}}
    `))
    foo := new(Foo)
    foo.Data[2][1] = 4
    tmpl.Execute(os.Stdout, foo)
}
2 голосов
/ 09 марта 2012

этот маленький образец должен вам помочь.

package main

import (
        "net/http"
        "text/template"
)

type Foo struct {
        Array [9][9]int
}

func handler(w http.ResponseWriter, r *http.Request) {
        var foo Foo

        for i := 0; i < len(foo.Array); i++ {
                for j := 0; j < len(foo.Array); j++ {
                        foo.Array[i][j] = j
                }
        }

        tmpl := template.Must(template.New("example").Parse(`
                <html>
                <body>
                <table>
                        {{ $a := .Array }}
                        {{ range $a }}
                        <tr>
                        {{ $elem := . }}
                        {{ range $elem }}
                        {{ printf "<td>%d<td>" . }}
                        {{ end}}
                        </tr>
                        {{end}}
                </table>
                </body>
                </html>
                `))

        tmpl.Execute(w, foo)
}

func main() {
        bindAddress := "127.0.0.1:8080"

        http.HandleFunc("/", handler)
        http.ListenAndServe(bindAddress, nil)

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...