2013-11-22 68 views
0

我是Django的新手,并且在this tutorial后面添加一个Like按钮到模块。我有这样的看法:Django CSRF令牌丢失或FormView不正确

class VoteFormView(FormView): 
    form_class = VoteForm 

    def form_valid(self, form): 


     pic = get_object_or_404(UserPic, pk=form.data["pic"]) 
     user = self.request.user 
     prev_votes = Vote.objects.filter(voter=user, pic=pic) 
     has_voted = (prev_votes.count() > 0) 



     if not has_voted: 
      # add vote 
      Vote.objects.create(voter=user, pic=pic) 
      print("voted") 
     else: 
      # delete vote 
      prev_votes[0].delete() 
      print("unvoted") 

     return render_to_response('userpics/photo.html', 
             {'pic':pic}) 

    def form_invalid(self, form): 
     print("invalid") 
     return render_to_response('userpics/photo.html', 
             {'pic':pic}) 

在photo.html我:

{% if pic %} 

<form method="post" action="/photo/vote/" class="vote_form"> 
    <li> [{{ pic.votes }}] 
    {% csrf_token %} 
    <input type="hidden" id="id_pic" name="pic" class="hidden_id" value="{{ pic.pk }}" /> 
    <input type="hidden" id="id_voter" name="voter" class="hidden_id" value="{{ user.pk }}" /> 
    <button>Like</button> 

</form> 

<img class="pic" src="/static/assets/{{pic}}" /> 


{% endif %} 

当我点击第二次照片页面上的链接一样,我得到这个错误:

Forbidden (403) 

CSRF verification failed. Request aborted. 

我想:

return render_to_response('userpics/photo.html', 
           {'pic':pic,}, 
           context_instance=RequestContext(request)) 

但由于此视图没有“请求”对象,因此上述语句也会导致错误。所以我不确定如何为这个视图实现csrf并感谢你的帮助。

回答

1

可以访问使用self.request的要求,所以尝试:

return render_to_response('userpics/photo.html', 
          {'pic':pic,}, 
          context_instance=RequestContext(self.request)) 
+0

感谢的人。这解决了这个问题。 – hbp

相关问题