Django的{{csrf_token}}仅输出令牌值,而没有隐藏的输入标记 [英] Django's {{ csrf_token }} is outputting the token value only, without the hidden input markup

查看:244
本文介绍了Django的{{csrf_token}}仅输出令牌值,而没有隐藏的输入标记的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

为什么当我使用 {{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文件看起来像这样:



<$从django.shortcuts导入p $ p> 从django.template导入render_to_response
导入RequestContext

def home(request):
return render_to_response('home。 html',
context_instance = RequestContext(request))

如您所见, m使用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。

解决方案

您必须将其用作标记 {%csrf_token%} code>不是您的视图传递的变量 {{csrf_token}}


Why isn't the markup for the hidden input field showing up when i use {{ csrf_token }}?

Here's a snippet from my template:

<form action="." method="post">
{{ csrf_token }}

I'm expecting something like this to be generated:

<form action="." method="post">
<input type="hidden" name="csrfmiddlewaretoken" value="0c90dab91e22382cbaa5ef375f709167">

But instead, this is the HTML that's generated:

<form action="." method="post">
0c90dab91e22382cbaa5ef375f709167

I've done this many times and it's working fine in my other projects, but I don't know what I missed this time.

My views.py file looks like this:

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))

As you can see, I'm using RequestContext. My middleware classes are defined like this in the settings.py file:

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',
)

So I am using django.middleware.csrf.CsrfViewMiddleware. Also, I'm on Django 1.3.0. Any ideas out there?

解决方案

You have to use it as tag {% csrf_token %} not as a variable passed by your view {{csrf_token}}

这篇关于Django的{{csrf_token}}仅输出令牌值,而没有隐藏的输入标记的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆