3

私は Django アプリケーションを開発中です。私は Django の研究に約 40 ~ 50 時間を費やしましたが、アプリケーションの作成に向けて順調に進んでいます。

しかし、実際の問題が何であるかをスタック トレースから正確に把握できないため、「より深刻な」エラーに遭遇し始めています。

基本的に、自分のページのリンクをクリックすると、次のエラーが表示されます。

リクエスト メソッド: GET リクエスト URL: /accounts/profile/ Django バージョン: 1.5.1 例外の種類: ValueError 例外
の値: *ビュー userprofile.views.user_profile が HttpResponse オブジェクトを返しませんでした。*

これにより、エラーがビューファイルにあると信じるようになりますが、チュートリアルの行を1行ずつたどっていたことを除いて、エラーはforms.pyを使用してHttpResponseオブジェクトを作成する方法にあると思われます。

コードは要するに、

form = UserProfileForm(request.POST, instance=request.user.profile)
...
args = {}
args.update(csrf(request)) // security token
args['form'] = form
return render_to_response('profile.html', args)

profile.html も間違いなく問題ありません。私はそれをテストしました。基本的には、有効なユーザー ログインを表示する login.html ページからこれを呼び出しています。

ご協力ありがとうございます。通常は質問しませんが、この問題だけで 5 ~ 6 時間の開発時間で立ち往生しています。このおそらく単純だが初心者には隠されたエラーを理解していないことで私を嘲笑しないようにしてください:)

また、このエラーをどのように解決したか、特に私の考えと根本的な誤解がどこにあるのかを示すことができれば、返信で希望します.

そして、あなたの回答では、ドキュメントの特定のインスタンスのみを参照してください.

再度、感謝します、

ジェームズ

コメント 1: チュートリアル

これが私が参照しているチュートリアルです。ハイパーリンクをクリックするまで、すべてのコードとすべてが機能していたため、バグの特定に行き詰まっています。私はエラーがどこから来ているのか経験していませ

2 番目のコメント: 関連するコード

userprofile/views.py

 def user_profile(request):
    if request.method=='POST':
       form = UserProfileForm(request.POST, instance=request.user.profile)
       if form.is_valid():
          form.save()
          return HttpResponseRedirect('/accounts/loggedin')
       else:
          user = request.user
          profile = user.profile
          form = UserProfileForm(instance=profile)

       args = {}
       args.update(csrf(request)) // security token
       args['form'] = form
       return render_to_response('profile.html', args)

myapp urls.py 、ユーザープロファイル urls.py

(r'^accounts/', include ('userprofile.urls')),
...
url(r'^profile/$', 'userprofile.views.user_profile'),
4

1 に答える 1

4

それが本当にビュー コードである場合、単純なインデント エラーです。そのはず:

def user_profile(request):
    if request.method=='POST':
        form = UserProfileForm(request.POST, instance=request.user.profile)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/accounts/loggedin')
    else:
        user = request.user
        profile = user.profile
        form = UserProfileForm(instance=profile)

    args = {}
    args.update(csrf(request)) // security token
    args['form'] = form
    return render_to_response('profile.html', args)

何が起こっているかというと、request.METHOD がGETの場合、最初の if に句がないelseため、view 関数は何も返さずに終了します。代わりに、フォームを作成してコンテキストに追加し、レンダリングする必要があります。これは、GETリクエストまたはフォームにエラーがあったためです。コンテキストを再レンダリングして、それらのエラーを表示し、ユーザーが修正できるようにします。彼ら。

于 2013-07-17T00:32:57.973 に答える