Django的 - {%csrf_token%}在使用模板,但上下文没有提供价值(Django -

2019-06-18 14:59发布

我是新来的Django,我仍然要去跟其功能交手。 我创建和Django 1.4.2非常简单的项目,其中有索引页,你进入这里提交后显示您的输入(代码如下)的东西,结果页面简单的形式。

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

A {%csrf_token%}在模板中使用,但上下文没有提供价值。 这通常是不使用的RequestContext造成的。 warnings.warn(“A {%csrf_token%}在模板中被使用,但上下文没有提供的值。这通常是通过不使用的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>

result.html

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

views.py

from django.http import HttpResponse
from django.shortcuts import render_to_response
from django.template import RequestContext

def index(request):
    return render_to_response('index.html')

def result(request):
    p = request.POST['answer']
    return render_to_response('result.html', {'answer': p}, context_instance=RequestContext(request))

我已经研究过的文档和互联网上的各种例子,但我不明白我在做什么错。 如果我在settings.py禁用django.middleware.csrf.CsrfViewMiddleware,我得到我想要的东西,但是这不是我要找的答案。

我很欣赏从有经验的Django忍者帮助:-)

Answer 1:

index.html呈现无RequestContext 。 试试这个:

def index(request):
    return render_to_response('index.html', context_instance=RequestContext(request))

我也建议更换您使用起来更加方便快捷render

from django.shortcuts import render

def index(request):
    return render('index.html')

从文档:

渲染()是调用与选择render_to_response是强制使用的RequestContext的context_instance参数相同的()。

编辑

感谢@nerdwaller用于提的是,新版本现在需要:

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


文章来源: Django - {% csrf_token %} was used in a template, but the context did not provide the value