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