RequestContextを使いなさい!
今まで動いていた Django 1.3.1 での settings.py の Middleware の部分はこんな感じ。
MIDDLEWARE_CLASSES = ( 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.csrf.CsrfResponseMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', )
確か「django.middleware.csrf.CsrfResponseMiddleware」を自分で加えてる。
コードはこんな感じ。
return render_to_response('mapitems/confirm.html', {'form':form, 'mapitem':mp})
で、confirm.html の form の部分には「{% csrf_token %}」がちゃんと入ってる。
このコードと html を Django 1.4 の環境にそのままコピーして、Middleware の件は忘れて何もせずに動作させてみた。
結果、フォームの送信で「CSRF verification failed. Request aborted.」となってしまった…。
反射的に「あ、Middleware に何か加えてたっけ!」と思い出して、「django.middleware.csrf.CsrfResponseMiddleware」を MIDDLEWARE_CLASSES に加えて再度挑戦。
すると、今度は nginx がそんなページない!ってエラーを出すようになった…。
ググると django.middleware.csrf.CsrfResponseMiddleware は Django 1.4 では deprecated みたいなので、settings.py から削除。
で、結局は「CSRF verification failed. Request aborted.」のエラーページに出ている「The view function uses RequestContext for the template, instead of Context.」という部分が今回の原因。
コードの部分を下記のようにしたら問題なくなった!
return render_to_response('mapitems/confirm.html', context_instance=RequestContext(request, {'form':form, 'mapitem':mp}))
form のコードは何ヵ所かあるのだけど、なぜかこの部分だけが RequestContext 使ってなかった。
というわけで、ダメダメだった自分のコードも修正して、ちゃんと Django 1.4 でも動作するようになりました!
- 作者: ビープラウド
- 出版社/メーカー: 秀和システム
- 発売日: 2012/03/26
- メディア: 単行本
- 購入: 6人 クリック: 765回
- この商品を含むブログ (27件) を見る
- 作者: Tarek Ziade,稲田直哉,渋川よしき,清水川貴之,森本哲也
- 出版社/メーカー: KADOKAWA/アスキー・メディアワークス
- 発売日: 2010/05/28
- メディア: 大型本
- 購入: 33人 クリック: 791回
- この商品を含むブログ (90件) を見る
Django×Python (LLフレームワークBOOKS)
- 作者: 露木誠
- 出版社/メーカー: 技術評論社
- 発売日: 2009/02/16
- メディア: 単行本(ソフトカバー)
- 購入: 10人 クリック: 129回
- この商品を含むブログ (36件) を見る