1

連絡先要素を更新するためのフォームを作成しようとしています。フォーム アクションを URL にリンクしたいのですが、URL は contact_id に基づいています。contact_id 変数をフォーム アクションに追加しようとすると、CSRF トークンがそれをエスケープしているため、変数として読み取られません。これを回避する方法はありますか、それとも間違った方法でアプローチしていますか?

ビュー.py

def contactedit(request, contact_id=1):
    if request.POST:
        contact = Contact.objects.get(id=contact_id)
        form = ContactForm(request.POST, instance=contact)
        if form.is_valid():
            form.save()

        return HttpResponseRedirect('/contact/{{ contact_id }}/')

    else:
        contact = Contact.objects.get(id=contact_id)
        form = ContactForm(instance=contact)

    args = {}
    args.update(csrf(request))

    args['form'] = form
    args['contact_id'] = contact_id

    return render_to_response('contactedit.html', args)

contactedit.html

<form action="/contact/{{ contact_id }}/edit/" method="post">{% csrf_token %}

エラー
ページが見つかりません (404) リクエスト方法: GET リクエスト URL: (ipaddress)/contact/%7B%7B%20contact_id%20%7D%7D/

4

1 に答える 1

2

あなたのコードは失敗しています

return HttpResponseRedirect('/contact/{{ contact_id }}/')

ここでテンプレート構文を使用しようとしていますが、使用する必要があります

return HttpResponseRedirect('/contact/'+str(contact_id))

それとは別に、フォームが無効な場合、コードはケースを処理せず、同じコードを呼び出します。フォームが有効でない場合、エラーが発生したフォームを再度表示することができます。django のフォーム処理ドキュメントを参照してください。

于 2013-11-08T09:29:37.267 に答える