2014-01-29 6 views
0

Я знаю, что некоторые люди подумают, что это дубликат, но я провел весь день на Stack Overflow, ища ответ. У меня есть страница со списком предметов, с, для каждая из них - кнопка, которую я хотел бы вызвать небольшое обновление в базе данных. Я не знаю, имеет ли это какое-либо отношение, но файл HTML, содержащий кнопку включено:django csrf error на HttpResponseRedirect

{% include "accueil/impasse.html" with l=l only %} 

файл «impasse.html» сам по себе:

<a {% if l.impasse %} class="impasse" {% endif %} href="{% url "index" %}lecon/{{l.numero}}"> {{l.numero}} : {{l.titre}} </a> 
{% if l.impasse %} 
    {% include "accueil/boutonDesImpasse.html" %} 
{% else %} 
    {% include "accueil/boutonImpasse.html" %} 
{% endif %} 

и файл «Accueil/boutonImpasse», который является тот, который вызывает ошибку является:

<form action="{% url "index" %}lecon/{{l.numero}}/impasse" method="post"> 
{% csrf_token %} 
<div class="form-actions"> 
<button type="submit" class="btn btn-primary">Je fais l'impasse sur cette leçon</button> 
</div> 
</form> 

соответствующее мнение:

@login_required() 
def impasse(request,numero): 
id = numeroAId(numero) 
if id==None: 
    return HttpResponse("Erreur, cette leçon n'existe pas.") 
else: 
    imp = Impasse(user=request.user,lecon=id) 
    imp.save() 
    return HttpResponseRedirect('/lecon',context_instance=RequestContext(context)) 

Теперь, на данный момент, у меня ошибка CSRF (в ветке else). Я знаю, что многим людям с одинаковой ошибкой рекомендуется использовать render_to_response с соответствующим шаблоном, но я не могу, потому что представление «lecon», связанное с URL-адресом «lecon», делает сложные вещи перед броском страницы, поэтому что Я действительно хочу загрузить представление «lecon». Обратите внимание, что после получения ошибки, если я снова попробую URL-адрес, который не удался, он загружается по желанию. Что мне делать?

ответ

1

Это не имеет никакого отношения к render_to_response или перенаправлению.

Вы специально исключаете переменную токена csrf из контекста исключенных шаблонов, используя «только» в теге include. Не делай этого.

(А HttpResponseRedirect не принимает параметр context_instance, поэтому не знаю, что вы там делаете.)

+0

спасибо за ваш ответ, что, конечно, имеет смысл! Я не помню, почему я должен был поставить это в первую очередь. Что касается context_instance, это была попытка принудительного подтверждения токена csrf, подражая тому, что было предложено на SO. – user3078439

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