我正在使用 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()
}
最佳答案
你的 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)
}
关于html - html 模板中的内容被模板的文件位置而不是所需的文本替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25478053/