我想处理POST请求的错误并重新呈现表单上面显示的错误,但是我看到的处理错误的唯一解决方案是http.Error()但这会返回明文响应,而不是HTML页面。有没有办法executeTemplate()并重新呈现带有表单的html页面?我应该将用户重定向到同一页面吗?如果是这样,我如何将错误信息传递给重定向的页面?
编辑:因此,当我使用此代码并尝试执行executeTemplate时,Post请求返回200状态代码(这是错误的)并重新呈现空白页,而不是我指定的模板。
func PostSignup(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
if r.Method != http.MethodPost {
http.Error(w, http.StatusText(405), http.StatusMethodNotAllowed)
return
}
usr := users.User{}
usr.Username = r.FormValue("username")
usr.Email = r.FormValue("email")
usr.Hash = r.FormValue("password")
errors := CredErrors{}
errors.Error = "Username cannot be blank"
if usr.Username == "" {
// http.Error(w, "Username cannot be blank.", 400)
tpl.ExecuteTemplate(w, "signup.gothml", errors)
return
}
答案 0 :(得分:0)
答案在于问题:
有没有办法执行tempmplate()并使用表单重新呈现html页面?
是的,使用executeTemplate
重新呈现表单。 http.Error()
用于返回HTTP错误,而不是表单验证错误。如果表单未通过验证并且您想要重新显示它,请执行此操作 - 将表单再次呈现给浏览器,无论验证错误/预填充/您想要显示什么。