4

こんにちは、よろしくお願いします。これは、次のスレッドからのフォローアップの質問です (そこに投稿するべきだったのか、新しいスレッドを開始するべきだったのかわかりません...:

{% csrf_token %} を持っているにも関わらず、CSRF トークンがないか正しくない

csrfContext を機能させるためにコードで何をする必要があるのか​​ わかりません。ModelForm を使用してデータをモデルに収集し、それを MYSQL テーブルに書き込もうとしています。エラーが発生しています:

失敗の理由:
    CSRF トークンが見つからないか、正しくありません。

コードは次のとおりです。

    django.shortcuts import render_to_response から
    djengo.template import RequestContext から
    django.http から HttpResponse、HttpRequest、HttpResponseRedirect をインポート
    from acmetest.models import Player
    from acmetest.models import PickForm

    csrfContext = RequestContext(リクエスト)
    return render_to_response('makepick.html', csrfContext)

    def playerAdd(リクエスト、id=None):
        form = PickForm(request.POST または None,
                           instance=id および Player.objects.get(id=id))

        # 新しい/編集されたピックを保存
        request.method == 'POST' および form.is_valid() の場合:
            フォーム.保存()
            return HttpResponseRedirect('/draft/')

        return render_to_response('makepick.html', {'form':form})

また、

ご協力ありがとうございました!

dpbklyn

4

2 に答える 2

2

次のようにコードを更新します。

from django.shortcuts import render
# from djengo.template import RequestContext <- this is not valid.

Yuji が指摘したように、これらの 2 行は有効な python ではなく、さらにrenderショートカットを使用する場合は必要ありません。

# csrfContext = RequestContext(request)
# return render_to_response('makepick.html', csrfContext)

戻り行を変更します。

 # return render_to_response('makepick.html', {'form':form})
   return render(request,'makepick.html',{'form':form})
于 2012-01-26T04:58:20.663 に答える
0

ビューについて話していると仮定しています-そこで応答にplayerAdd渡す必要があります。RequestContext

def playerAdd(request, id=None):
    form = PickForm(request.POST or None,
                       instance=id and Player.objects.get(id=id))
    # Save new/edited pick
    if request.method == 'POST' and form.is_valid():
        form.save()
        return HttpResponseRedirect('/draft/')

    return render_to_response('makepick.html', RequestContext(request, {'form':form}))

コードの最初の行は理解しにくく、有効な python のようにも見えません。return関数ブロックの外からは使用できません。

于 2012-01-26T03:22:51.400 に答える