2014-01-29 59 views
0

我知道有些人會認爲這是一個重複的,但我已經花了整個下午堆棧溢出尋找答案.. 我有一個頁面的項目列表,與,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」。請注意,在我收到錯誤後,如果我再次嘗試失敗的網址,則會按照要求加載。我該怎麼辦?

回答

1

這與render_to_response或重定向無關。

通過使用include標籤中的「only」,您特別排除了排除模板上下文中的csrf標記變量。不要這樣做。

(和HttpResponseRedirect不採取context_instance參數,所以不知道你在那裏幹什麼。)

+0

非常感謝您的回答,那當然非常有意義!我不記得爲什麼我必須把它擺在首位。至於context_instance,這是試圖通過模仿SO上建議的內容來強制確認csrf標記。 – user3078439