не может оценить данные поля в строке типа - PullRequest
0 голосов
/ 22 марта 2020

пытается распечатать содержимое переменных данных на странице html:

package main

import (
    "net/http"
    "fmt"
    "log"
    "html/template"
)

var tpl *template.Template

func init(){
    tpl= template.Must(template.ParseGlob("*.html"))
}

func main(){
    http.HandleFunc("/",  index)
    http.HandleFunc("/process", processor)
    http.ListenAndServe(":8080", nil)
}

func index(w http.ResponseWriter, r *http.Request){
    tpl.ExecuteTemplate(w, "index.html",nil)
}

func processor(w http.ResponseWriter, r *http.Request){
    if r.Method != "GET" {
        http.Redirect(w,r,"/", http.StatusSeeOther)
        return
    }
    data := r.FormValue("data")
    fmt.Printf("%s",data)
    err:=tpl.ExecuteTemplate(w, "processor.html", string(data))
    if err != nil {
    log.Fatalf("execution failed: %s", err)
}
    //tpl.ExecuteTemplate(w, "processor.html",data)
}

вот html

<html>
    <head>
        <title>PROCESSOR</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
    <body>
        <h1>{{.data}}</h1>
    </body>
</html>

это то, что печатает моя оболочка:

poo2020/03/22 19:13:50 execution failed: template: processor.html:8:11: executing "processor.html" at <.data>: can't evaluate field data in type string
exit status 1

poo, являющееся содержимым данных (доказательство того, что я правильно получаю его с начальной страницы html. Проверил некоторые похожие проблемы, попытался использовать переменную $ data, но я получил ту же проблему .

1 Ответ

1 голос
/ 22 марта 2020

Вы передаете строковую переменную процессору шаблонов, так что это все, что есть в его контексте, поэтому вы должны использовать:

{{.}}

в шаблоне, чтобы распечатать его. Или вы можете передать контекст с полем «data» как:

 err:=tpl.ExecuteTemplate(w, "processor.html", map[string]interface{}{"data":string(data)})

и использовать

{{.data}}

в шаблоне.

В любом объекте, в который вы передаете ExecuteTemplate доступен с помощью {{.}}. Обозначение {{.data}} будет обращаться к имени поля data в этом объекте.

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