我知道有些人会认为这是一个重复的,但我已经花了整个下午堆栈溢出寻找答案.. 我有一个页面的项目列表,与,for每一个,我想在数据库中触发一个小更新的按钮。我不知道这是否有任何关系,但包括含有该按钮的HTML文件:Django csrf错误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与相应的模板,但我不能,因为与URL“lecon”相关联的视图“lecon”在投掷页面之前做了复杂的事情,所以我真的想要加载视图“lecon”。请注意,在我收到错误后,如果我再次尝试失败的网址,则会按照要求加载。我该怎么办?
非常感谢您的回答,那当然非常有意义!我不记得为什么我必须把它摆在首位。至于context_instance,这是试图通过模仿SO上建议的内容来强制确认csrf标记。 – user3078439