当我使用{{ csrf_token }}
时,为什么隐藏输入字段的标记不显示?
以下是我模板的摘录:
<form action="." method="post">
{{ csrf_token }}
我期待生成这样的东西:
<form action="." method="post">
<input type="hidden" name="csrfmiddlewaretoken" value="0c90dab91e22382cbaa5ef375f709167">
但相反,这是生成的HTML:
<form action="." method="post">
0c90dab91e22382cbaa5ef375f709167
我已经做了很多次,并且在我的其他项目中工作正常,但我不知道这次我错过了什么。
我的views.py文件如下所示:
from django.shortcuts import render_to_response
from django.template import RequestContext
def home(request):
return render_to_response('home.html',
context_instance=RequestContext(request))
如您所见,我正在使用RequestContext。我的中间件类在settings.py文件中定义如下:
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',
)
所以我使用的是django.middleware.csrf.CsrfViewMiddleware。另外,我在Django 1.3.0上。那里有什么想法吗?
答案 0 :(得分:31)
您必须将其用作标记{% csrf_token %}
,而不是视图{{csrf_token}}
传递的变量
答案 1 :(得分:7)
我使用模板中的下一个来解决您的问题:
<input type='hidden' name='csrfmiddlewaretoken' value='{{ csrf_token }}' />