Django-{%csrf_token%}已在模板中使用,但上下文未提供该值

Django-{%csrf_token%}已在模板中使用,但上下文未提供该值,django,csrf,django-csrf,Django,Csrf,Django Csrf,我是Django的新手,我仍在努力掌握它的特性。我已经用Django 1.4.2创建了一个非常简单的项目,它有一个索引页面,其中有一个简单的表单,您可以在其中输入内容,结果页面在提交后显示您的输入(代码如下) 提交后,我收到错误403和以下消息: 模板中使用了{%csrf_token%},但上下文没有使用 提供值。这通常是由于不使用 请求上下文。warnings.warn(“一个{%csrf_令牌%}被用于 模板,但上下文未提供值。这通常是 由于未使用RequestContext而导致。“) i

我是Django的新手,我仍在努力掌握它的特性。我已经用Django 1.4.2创建了一个非常简单的项目,它有一个索引页面,其中有一个简单的表单,您可以在其中输入内容,结果页面在提交后显示您的输入(代码如下)

提交后,我收到错误403和以下消息:

模板中使用了{%csrf_token%},但上下文没有使用 提供值。这通常是由于不使用 请求上下文。warnings.warn(“一个{%csrf_令牌%}被用于 模板,但上下文未提供值。这通常是 由于未使用RequestContext而导致。“)

index.html

<!DOCTYPE html>
<head>
    <title>Index page</title>
</head>
<body>
    <div id="header">Welcome to index page</div>
    <div id="content">
        <p>Enter your name</p>
        <form action="/result/" method="post" accept-charset="utf-8">{% csrf_token %}
            <input type="text" name="answer">
            <input type="submit" value="Send!">
        </form>
    </div>
</body>
<!DOCTYPE html>
<head>
    <title>Result page</title>
</head>
<body>
    <div id="header">Here is the result</div>
    <div id="content">
        <p>Your name is: {{ answer }}</p>
    </div>
</body>
我查阅了互联网上的文档和各种例子,但我不明白我做错了什么。如果我在settings.py中禁用django.middleware.csrf.CsrfViewMiddleware,我会得到我想要的,但这不是我想要的答案


我感谢更有经验的Django忍者的帮助:-)

您的
index.html
在没有
RequestContext
的情况下呈现。试试这个:

def index(request):
    return render_to_response('index.html', context_instance=RequestContext(request))
我还建议您使用更方便的快捷方式:

从文档:

render()与使用 上下文\强制使用RequestContext的实例参数

编辑

感谢您的提及,新版本现在需要:

render(request, 'index.html', {params});

我在使用Django 2.1时遇到了这个错误,结果发现它是由在另一个ajax请求调用的模板中发出ajax请求引起的。因此,解决方案是将“request=request”添加到我的渲染函数中:

args = {'someargs': somevalues}
html = render_to_string(
        'my_template.html', context=args, request=request)
return HttpResponse(html)

您正在使用django runserver吗?是的,我正在使用“manage.py runserver”进行测试。有什么限制吗?天哪,我真傻。这一直是解决办法。我认为我只需要在实际发送POST数据的视图中定义RequestContext。Thx@Golliney!谢谢你的专业提示!我的问题解决了,您的答案被接受:-)django的最新版本要求:
render(请求,'index.html',{params})供任何人查看。
render(request, 'index.html', {params});
args = {'someargs': somevalues}
html = render_to_string(
        'my_template.html', context=args, request=request)
return HttpResponse(html)