2012-03-07 106 views
12

下面是HTML的模板的相關片段:Django的CSRF令牌不會顯示

<form action="/submit_text/" method="post"> 
    {% csrf_token %} 
    {% include "backbone/form_errors.html" %} 
    {{form.as_p}} 
    <input type="submit" value="Submit" /> 
    </form> 

這裏是我的settings.pyMIDDLEWARE_CLASSES聲明:

MIDDLEWARE_CLASSES = ( 
    'django.middleware.common.CommonMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
) 

的CSRF令牌根本不顯示,導致一個

禁止(403)CSRF驗證失敗。請求中止。

回答

21

您需要通過render_to_response中的RequestContext才能使上下文處理器實際運行。

from django.template import RequestContext 

context = {} 
return render_to_response('my_template.html', 
          context, 
          context_instance=RequestContext(request)) 

render快捷方式(Django的1.3+)會爲你做它:

from django.shortcuts import render 

context = {} 
return render(request, 'my_template.html', context) 
+0

謝謝你,這工作! – babonk 2012-03-08 03:27:26

+1

非常有幫助!我有一個自定義模板標籤,所以我必須指定'@ register.simple_tag(takes_context = True)',然後'返回render_to_string('template.html',{},context_instance = context)'。 – osa 2013-12-16 05:27:19

5

雖然有檢查答案,我想指出的是,寫context_instance....變得非常煩人。我覺得這很有用...特別是與forms

context.update(csrf(request)) 
+0

感謝您的提示 – babonk 2012-03-08 07:07:44