在POST请求失败时呈现模板[golang]

时间:2017-05-17 15:05:23

标签: go

我想处理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
}

1 个答案:

答案 0 :(得分:0)

答案在于问题:

  

有没有办法执行tempmplate()并使用表单重新呈现html页面?

是的,使用executeTemplate重新呈现表单。 http.Error()用于返回HTTP错误,而不是表单验证错误。如果表单未通过验证并且您想要重新显示它,请执行此操作 - 将表单再次呈现给浏览器,无论验证错误/预填充/您想要显示什么。