あなたのエラーはjQuery側にあるようです。エラーキーは、別の方法で定義された関数を指しています (こちらを参照)。
error タイプ: Function( jqXHR jqXHR, String textStatus, String errorThrown ) リクエストが失敗した場合に呼び出される関数。関数は 3 つの引数を受け取ります。jqXHR (jQuery 1.4.x では XMLHttpRequest) オブジェクト、発生したエラーの種類を説明する文字列、およびオプションの例外オブジェクト (発生した場合) です。2 番目の引数 (null 以外) に指定できる値は、"timeout"、"error"、"abort"、および "parsererror" です。HTTP エラーが発生すると、errorThrown は「Not Found」や「Internal Server Error」などの HTTP ステータスのテキスト部分を受け取ります。jQuery 1.5 以降、エラー設定は関数の配列を受け入れることができます。各関数が順番に呼び出されます。注: このハンドラーは、クロスドメイン スクリプトおよびクロスドメイン JSONP リクエストでは呼び出されません。
したがって、JS コードは次のようになります。
error: function(jqXHR, textStatus, errorThrown) {
...
},
しかし実際には、django からデータを返せば成功です。jQuery の「エラー」は、セマンティック エラーではなく、通信エラーを意味します。
あなただけを使用する場合
error: function(jqXHR, textStatus, errorThrown) {
alert("An error!")
},
おそらく呼び出されないことがわかるでしょう (呼び出されるには、django から 400/500 エラー コードを返す必要があります)。
したがって、「真の」成功の場合に正常に返されるものと、サーバー側の障害の場合に正常に返されるものを区別することができます。
# and/or answer.data['errorMessage'] = "Error type II"
answer.data['success'] = False
return answer
そしてjQueryで:
success: function(data, textStatus, jqXHR) {
// instead of checking for success, you can check the content of
// the "accounts/create" key
// if (!data.success) {
// I assume that this key won't be present in case of error.
if (data["accounts/create"]) {
alert("Errors will now be displayed")
// ...here, the same code in Corinne Kubler's answer; or you
// can make it more jQueryish with e.g. .each()
return;
}
alert("Everything OK, proceeding")
// ...
}