読者です 読者をやめる 読者になる 読者になる

render_to_responseよりdirect_to_templateのほうが楽だよねって話

csrf_tokenが通らかなった

なんかのコピペでつくってたけど{% csrf_token %}をいれても「csrf_tokenがないよ」ってエラーになったりする。

原因

render_to_responseで渡された辞書はそれしか評価しない。direct_to_templateだとcontext_processorsのもはいる。詳しいことはわからん。コード嫁。
http://code.djangoproject.com/browser/django/trunk/django/views/generic/simple.py#L14

settings.py
TEMPLATE_CONTEXT_PROCESSORS = (
    'django.core.context_processors.csrf',
)
views.py
from django.views.generic.simple import direct_to_template
...
def index(request):
  hoge = HogeFrom(request.POST)
  return direct_to_template(request,"index.html",{'hoge':hgoe})

2012/07/24 追記

いまでもたまに render_to_response で検索来るので公式ドキュメントのリンク貼っておきます
参考::汎用ビュー — Django v1.0 documentation
いまでもあんまりちゃんとは理解していないけれど

  • テンプレート描画関係のrender関数のショートカットが render_to_response
  • render_to_response を RequestContextを内蔵したショートカットが direct_to_template

という理解でいる。詳細はコード嫁、になるけど、csrf_token の件で言えば context_processors で使用するしそこで RequestContext が必要になるから direct_to_template のほうが結局なにかと楽だよね、って話になると思う。

広告を非表示にする