Добавьте некоторую дату в Struct, затем поместите это в шаблон go - PullRequest
0 голосов
/ 22 декабря 2018

У меня есть файл controllers / catalog.go, который содержит обработчик HTTP:

func Catalog(w http.ResponseWriter, r *http.Request) {
    if r.Method != "GET" {
        http.Error(w, http.StatusText(405), http.StatusMethodNotAllowed)
        return
    }

    categories, err := models.GetCategories()
    if err != nil {
        http.Error(w, http.StatusText(500), http.StatusInternalServerError)
        return
    }
    fmt.Print(categories)
    config.TPL.ExecuteTemplate(w, "catalog.html", categories)
}

и models / getcategories.go:

type Cat_tree struct {
    Cat_id    int
    Parent_id int
    Cat_name  string
}

func GetCategories() ([]Cat_tree, error) {
    rows, err := config.DB.Query("SELECT cat_id, parent_id, cat_name FROM categories WHERE active = true ORDER BY Parent_id ASC")
    if err != nil {
        return nil, err
    }
    defer rows.Close()

    categories := make([]Cat_tree, 0)

    for rows.Next() {
        cat := Cat_tree{}
        err := rows.Scan(&cat.Cat_id, &cat.Parent_id, &cat.Cat_name)
        if err != nil {
            return nil, err
        }
        categories = append(categories, cat)
    }
    if err = rows.Err(); err != nil {
        return nil, err
    }

    return categories, nil
}

Как добавить некоторые данные в категории заголовок страницы, например

Теперь в таком шаблоне

   {{range .}}
    <p><a href="/show?getinfo={{ .Cat_id}}">{{ .Cat_id}}</a> - {{ .Parent_id}} - {{ .Cat_name}} <a href="/show?getinfo={{ .Cat_id}}">Показать</a>
    {{end}}

Я хотел бы добавить {{Title}}

Ответы [ 2 ]

0 голосов
/ 22 декабря 2018

Вы должны создать другую структуру и поместить туда категории и информацию о странице.Вы также можете использовать карты, но struct более чистый подход.

type Page struct {
Title string
Categories []Cat_Tree
}

func Catalog(w http.ResponseWriter, r *http.Request) {
    if r.Method != "GET" {
        http.Error(w, http.StatusText(405), http.StatusMethodNotAllowed)
        return
    }

    categories, err := models.GetCategories()
    if err != nil {
        http.Error(w, http.StatusText(500), http.StatusInternalServerError)
        return
    }
    page := Page {Title:"My Title",Categories:categories}
    config.TPL.ExecuteTemplate(w, "catalog.html", page)
}

И в вашем шаблоне:

<h1>{{ .Title }}</h1>
{{range .Categories}}
    <p><a href="/show?getinfo={{ .Cat_id}}">{{ .Cat_id}}</a> - {{ .Parent_id}} - {{ .Cat_name}} <a href="/show?getinfo={{ .Cat_id}}">Показать</a>
    {{end}}
0 голосов
/ 22 декабря 2018

Я обычно передаю свой шаблон map[string]interface{}:

data := make(map[string]interface{})
data["Categories"] = categories
data["Title"] = "This is the title"
config.TPL.ExecuteTemplate(w, "catalog.html", data)

<title>{{.Title}}</title>
<body>
{{range .Categories}}
    <p><a href="/show?getinfo={{ .Cat_id}}">{{ .Cat_id}}</a> - {{ .Parent_id}} - {{ .Cat_name}} <a href="/show?getinfo={{ .Cat_id}}">Показать</a>
{{end}}
</body>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...