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

标签 html templates go web-frameworks

我正在使用 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/

相关文章:

javascript - HTML5 Canvas 在不同机器上的不同颜色值

javascript - 如何在apex页面中查看div标签内的内容?

c++ - 使用 arg、*和* 作为数组实例化 C++ 模板化类

mysql - 如何解决mysqldump Got error : 1044: "Access denied for user ' ' @'localhost' to database 'db_name' "when selecting the database

docker - 如何将 Docker 容器中运行的 Grafana 连接到主机上运行的 Prometheus 数据源(在 Docker for Mac 上)?

regex - Golang替换不在引号之间的所有空格

html - 如何在悬停时更改 SVG 图像的颜色?

javascript - 当我向下滚动页面时,如何让一个 div 跟随我?

amazon-web-services - 如何在速度模板中添加生成随机 UUID 等功能,用于 API 网关中的请求/响应映射

html - 线性渐变和盒子阴影之间的白线,元素垂直居中