我知道有些人會認爲這是一個重複的,但我已經花了整個下午堆棧溢出尋找答案.. 我有一個頁面的項目列表,與,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