2015-06-21 7 views
0

Я представляю Django 1.7, используя этот код. Здесь я обрабатываю html-шаблон с именем frame.html и передавая контекст.Значок CSRF не вставлен в шаблон

from django.template import Context 
from django.template import Template 
from django.shortcuts import render 
from django.http import HttpResponse 

def frame(request): 
    if request.GET.get('qid'): 
     qid = request.GET['qid'] 
     displayQuestion = questions.objects.filter(questionSetId=qid)[0].Questions 
     questionJSON = json.loads(displayQuestion) 
     template = Template('frame.html') 
     context = Context({'qid':qid,'questionData':questionJSON}) 
     return render(request,'frame.html',context) 
    else: 
     return views.products(request) 

В моем шаблоне frame.html есть форма, и я usinf {%csrf_token%} тег внутри этого. Вот код.

<form action="/submit" method="POST" id="responseform"> 
     {% csrf_token %} 
     <input type="hidden" id="questionID" name="questionID" value="{{qid}}"> 
     <input type="hidden" id="studentResponse" name="responses" value=""> 
</form> 

Моя проблема, несмотря на использование csrf_token тега, я получаю сообщение об ошибке CSRF token missing or incorrect. Проверьте эту ошибку. Спасибо

ответ

1

Почему вы используете класс Context? render создает для вас RequestContext при передаче dict, и это то, что вам нужно для запуска процессоров контекста, включая тот, который вставляет токен CSRF. Просто падение, что импорт и использовать Dict:

context = {'qid':qid,'questionData':questionJSON} 
    return render(request,'frame.html',context) 

Вам не нужно класса шаблона или переменную, которую вы получите от него, либо - опять же, render делает все, что для вас, и вы даже не проходя что template переменная в любом месте.

+0

Мое невежество, только мое невежество. Удивительно! – nitroman

Смежные вопросы