Я новичок в 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 для этого представления и оценить вашу помощь.
спасибо человеку. Это решило проблему. – hbp