Django 将 CSRF 令牌输出为对象而不是值
我在 Django 中以简单的 POST 形式处理 CSRF 令牌。该模板生成以下 CSRF 输出,而不是输出令牌的值:
<input type='hidden' name='csrfmiddlewaretoken' value='{'csrf_token':django.utils.functional.__proxy__ object at 0x1255690>}' />
我在模板中使用 {% csrf_token %}
,如何解决此问题? (我正在使用 Django 1.2)
编辑:确切的表单代码是:
<form name="foo" action="url" method="POST">
{% csrf_token %}
<select>
{% for key, account in accounts.items %}
<option value="{{ key }}">{{ account }}</option>
{% endfor %}
</select>
<input type="submit">
</form>
I am struggling with the CSRF token in a simple POST form in Django. The template generates the following CSRF output instead of outputting the value of the token:
<input type='hidden' name='csrfmiddlewaretoken' value='{'csrf_token':django.utils.functional.__proxy__ object at 0x1255690>}' />
I am using {% csrf_token %}
in the template, how can I fix this? (I am using Django 1.2)
EDIT: the exact form code is:
<form name="foo" action="url" method="POST">
{% csrf_token %}
<select>
{% for key, account in accounts.items %}
<option value="{{ key }}">{{ account }}</option>
{% endfor %}
</select>
<input type="submit">
</form>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我找到了原因:在settings.py中我添加了:
django.middleware.csrf.CsrfViewMiddleware
但不是:
django.middleware.csrf.CsrfResponseMiddleware
。因此,在
django.middleware.csrf.CsrfViewMiddleware
和django.middleware.common.CommonMiddleware
之后添加django.middleware.csrf.CsrfResponseMiddleware
就可以了去。I found the cause: in settings.py I had added:
django.middleware.csrf.CsrfViewMiddleware
but not:
django.middleware.csrf.CsrfResponseMiddleware
.So add
django.middleware.csrf.CsrfResponseMiddleware
afterdjango.middleware.csrf.CsrfViewMiddleware
anddjango.middleware.common.CommonMiddleware
and you are good to go.