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

时间:2014-08-25 01:51:12

标签: html templates go web-frameworks

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

所以在response.html中,{{。标题}}显示为“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()
}

1 个答案:

答案 0 :(得分:0)

您的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)
}