尝试在表单提交上呈现结果页面时,将显示空白html文档

尝试在表单提交上呈现结果页面时,将显示空白html文档,html,go,web-frameworks,Html,Go,Web Frameworks,下面的代码呈现初始页面,其中包含一个表单。在提交该表单时,我希望呈现一个结果页面。表单提交并被处理,但我看到的只是一个空白的html文档 我不想只显示html页面,而是将其呈现为表单提交时的一些内容将来自我的golang代码。我尝试使用模板(来自模板)来实现这一点,中的指定行是golang变量的值 如果有人能帮我弄清楚如何呈现结果页面,我将不胜感激 package main import ( //"fmt" "net/http" "github.com/zenazn

下面的代码呈现初始页面,其中包含一个表单。在提交该表单时,我希望呈现一个结果页面。表单提交并被处理,但我看到的只是一个空白的html文档

我不想只显示html页面,而是将其呈现为表单提交时的一些内容将来自我的golang代码。我尝试使用模板(来自模板)来实现这一点,
中的指定行是golang变量的值

如果有人能帮我弄清楚如何呈现结果页面,我将不胜感激

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 (p *Page) save() error{
     filename := p.Title + ".txt"
     return ioutil.WriteFile(filename, p.Body, 0600) 
}


func loadPage(title string) (*Page, error){
     filename := title + ".txt"
     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, _ := template.ParseFiles("Projects/Go/src/web/site/" + tmpl + ".html")
     t.Execute(w, p) 
}


func editHandler(w http.ResponseWriter, r *http.Request){
     title := r.URL.Path[len("/edit/"):]
     p, err := loadPage(title)
     if err != nil{
         p = &Page{Title: title}
     }
     renderTemplate(w, "edit", p)
}


func viewHandler(w http.ResponseWriter, r *http.Request){
     title := r.URL.Path[len("/ask"):]
     p, _ := loadPage(title)
     renderTemplate(w, "ask", p)
}


func response(c web.C, w http.ResponseWriter, r *http.Request){
     //name := r.FormValue("name")
     //fmt.Fprintf(w, "Hello, %s!", name)

     http.HandleFunc("/ask", viewHandler)
     http.HandleFunc("/edit/", editHandler)
     //http.HandleFunc("/save", saveHandler)
     http.ListenAndServe("8000", nil)
}


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()
}
文件结构:

root/Projects/Go/src/web/site/edit.html

root/Projects/Go/src/web/site/index.html

root/Projects/Go/src/web/site/view.html

html的正文:

<form action="ask" method="get">
    <input type="text" name="q" />
</form>
<form action="ask" method="get">
    <input type="text" name="q" />
</form>
<h1 class="abTitle">{{printf "%s" .Body}}</h1>

view.html的正文:

<form action="ask" method="get">
    <input type="text" name="q" />
</form>
<form action="ask" method="get">
    <input type="text" name="q" />
</form>
<h1 class="abTitle">{{printf "%s" .Body}}</h1>

{{printf“%s”.Body}

view.html和edit.html完全相同。

理论上,您发布的脚本应该响应
/
请求,并在请求
/ask
时崩溃。在对
/ask
的请求中,它应该执行
响应处理程序和panic(如文档所述,但具体将发生什么还不清楚。无论如何,提前配置所有处理程序并避免在响应中注册处理程序将更为惯用(对于这样小的服务器)

另一个问题是
viewHandler
函数中的问题-它将仅通过
/ask
请求调用,但是
/ask
将被剥离,标题将为“”-这将导致加载“.txt”模板文件,这可能不是有意的


如果您发布表单模板的内容和文件结构(文件夹和文件名),也会很有帮助.

谢谢。我用文件位置和文件的html更新了问题。我希望这对你有所帮助。如果你还需要什么,请告诉我。提前谢谢!
。/web/ask
绝对不是你想要的:你需要某个地方将表单发布到。@elithrar不如直接询问或../ask请求操作?然后我会改变发布的方法。我认为get是用于带有结果页的内容,而post是用于发送数据,如联系人表单?抱歉,我错过了。在这种情况下,
get
可以,但应该是
action=“/ask”——即应用程序中的一条路径。@ ILeSurar,我将它更改为在索引中所示的.NETX.html、VIEW.HTML和Edj.html,但空白页仍然存在。模板是否有打开/关闭<代码> <代码>和<代码> <代码>标签?