html 模板中的内容被模板的文件位置替换,而不是所需的文本

我正在使用 html/template 包在提交表单时提供模板。作为该模板副本的页面正在使用模板文件的位置而不是应替换 {{ .Title }} 的文本呈现


所以在 response.html 中,{{ .Title }} 显示为“Projects/Go/src/web/site/index”而不是“我觉得是”


如何将 {{ .Title }} 替换为文本而不是文件位置?


这是我的代码:


package main



import (

    "fmt"

    "net/http"


    "github.com/zenazn/goji"

    "github.com/zenazn/goji/web"


    "html/template"

    "io/ioutil"

)



type Page struct {

    Title string

    Body []byte

}



func loadPage(title string) (*Page, error){

    filename := title + ".html"

    body, err := ioutil.ReadFile(filename)

    if err != nil{

       return nil, err

    }

    return &Page{Title: title, Body: body}, nil 

}



 func renderTemplate(w http.ResponseWriter, tmpl string, p *Page){

     t, err := template.ParseFiles(tmpl + ".html")


 if err != nil{

     panic(err)

 }


 err = t.Execute(w, p)

     fmt.Println(err)

}



func response(c web.C, w http.ResponseWriter, r *http.Request){


    p, err := loadPage("Projects/Go/src/web/site/index")

    if err != nil{

        p = &Page{Title: "I feel that is "}

        panic(err)

    }

    renderTemplate(w, "Projects/Go/src/web/site/response", p)

}



func serveSingle(filename string) func(w http.ResponseWriter, r *http.Request) {

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

         http.ServeFile(w, r, filename)

     }

}



 func main() {

     goji.Get("/", serveSingle("Projects/Go/src/web/site/index.html"))

     goji.Handle("/ask", response)

     goji.Serve()

}


BIG阳
浏览 251回答 1
1回答

慕的地8271018

您的loadPage()函数设置Page.Title为文件路径,.html默认情况下减去扩展名。您只覆盖在你的默认行为response()功能时err != nil。您还可以p使用该行完全覆盖变量,p = &Page{Title: "I feel that is "}而不仅仅是Title在现有Page.你应该尝试改变:func response(c web.C, w http.ResponseWriter, r *http.Request){    p, err := loadPage("Projects/Go/src/web/site/index")    if err != nil{        p = &Page{Title: "I feel that is "}        panic(err)    }    renderTemplate(w, "Projects/Go/src/web/site/response", p)}到:func response(c web.C, w http.ResponseWriter, r *http.Request){    p, err := loadPage("Projects/Go/src/web/site/index")    if err != nil{        panic(err)    }    p.Title = "I feel that is "    renderTemplate(w, "Projects/Go/src/web/site/response", p)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go