2017-05-17 28 views
0

POST要求のエラーを処理し、その上にエラーが表示されたフォームを再描画したいが、エラーを処理する唯一の解決策はhttp.Error )しかし、これはHTMLページではなく、平文応答を返します。 executeTemplate()メソッドを使ってHTMLページをフォームに再レンダリングする方法はありますか?ユーザーを同じページにリダイレクトするはずですか?もしそうなら、そのリダイレクトされたページにエラー情報を渡すにはどうしたらいいですか?POST要求が失敗したときにテンプレートをレンダリングする[golang]

編集:このコードを使用して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

答えは質問である:

executeTemplate(に方法はあります)と、フォームとHTMLページを再レンダリング?

はい、executeTemplateを使用してフォームを再レンダリングします。 http.Error()は、フォームエラーではなくHTTPエラーを返すためのものです。フォームが検証に失敗し、再表示したい場合は、それを実行します。表示するすべての検証エラー/事前挿入/任意の方法で、フォームを再度ブラウザに表示します。

+0

私のポストハンドラでexecuteTemplate()を使用すると、テンプレートではなく空白のページがレンダリングされます。私は明確にするコードで私の質問を編集しました。 – comebacknader

+0

ExecuteTemplateはエラーを返し、それをチェックしていません。これが私の最初のステップです。テンプレートを実行すると何が起きているのかを見てください。 – Adrian

+0

ああ!それは少しスペルミスでした!私はあなたが言ったことをして、エラーをチェックし、問題を見つけました。あなたロック。ありがとうございました! – comebacknader

関連する問題