Django - {% csrf_token%} a été utilisé dans un modèle, mais le contexte n'a pas fourni la valeur

Je suis nouveau sur Django et je suis encore à essayer de se familiariser avec ses caractéristiques. J'ai créé le projet très simple avec Django 1.4.2 qui a l'index de la page avec un formulaire simple où vous entrez quelque chose et les résultats de la page où votre entrée est affichée après la soumission (le code est ci-dessous).

Après la présentation, j'obtiens l'erreur 403 et le message suivant:

Un {% csrf_token %} a été utilisé dans un modèle, mais le contexte n'a pas
fournir la valeur. Cela est généralement causé par la non-utilisation
RequestContext. mises en garde.warn ("{% csrf_token %} a été utilisé dans un
modèle, mais le contexte ne fournit pas la valeur. Ce n'est généralement
causé par la non-utilisation 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))

J'ai regardé dans la documentation et des exemples divers sur Internet, mais je ne comprends pas ce que je fais mal. Si je désactive django.middleware.csrf.CsrfViewMiddleware dans settings.pyj'obtiens exactement ce que je veux, mais ce n'est pas la réponse que je cherche.

J'apprécie l'aide de collègues plus expérimentés Django ninjas 🙂

source d'informationauteur Tubeless | 2012-10-24