擅长:python、mysql、java
<p>您使用这两种方法将CSRF令牌传递给模板处理器</p>
<pre><code>c = {}
c.update(csrf(request))
</code></pre>
<p><strong>和</strong>请求上下文,只要一个就足够了,<a href="https://docs.djangoproject.com/en/dev/ref/contrib/csrf/" rel="nofollow">see docs</a>。但你用错了地方,因为你是在满足“邮政”的要求。当浏览器填写表单并希望获得结果时,通常会发送这些请求。</p>
<p>浏览器呈现home.html,向服务器发送GET请求,服务器由</p>
<pre><code>t = get_template('home.html')
html = t.render(ResponseContext({'name':name}))
return HttpResponse(html)
</code></pre>
<p>你的代码的一部分。在那里,你不能使用任何手段传递csrf令牌。因此,当调用模板处理器<code>get_template().render()</code>时,is的上下文中没有标记,因此只需忽略模板中的{%csrf_token%}代码。因此,您要么在t.render(…)视图中使用<code>RequestContext</code>,要么将<code>c</code>dict传递给您。</p>
<p>您可以在浏览器窗口中检查生成的表单。</p>
<p><strong>更新</strong></p>
<p>在<code>seetings.py</code>中,在<code>'django.core.context_processors.csrf'</code>之后添加一个逗号,现在的方式是,它只是连接字符串。</p>
<p>应该是:</p>
<pre><code>TEMPLATE_CONTEXT_PROCESSORS = (
'django.core.context_processors.csrf',
'django.contrib.auth.context_processors.auth',
'django.core.context_processors.debug',
</code></pre>