我为一个博客做了一个评论模型,我想给用户一个删除注释的方法,所以我为它做了一个基于函数的视图,但是它不起作用,所以我决定使用一个基于类的视图,但是这两个视图都有相同的错误。唯一发生的事情是,url在它之后得到一个?,页面就会刷新。下面给出了基于函数的视图和基于类的视图。
func基
def comment_delete(request, pk):
comment_to_delete=get_object_or_404(comment,pk=pk)
if request.method=='POST':
post_url=comment_to_delete.content_object.get_absolute_url()
comment_to_delete.delete()
messages.success(request, 'Your comment has been deleted')
return HttpResponseRedirect(post_url)
context={
'comment':comment_to_delete
}
return render(request, 'blog/confirm_delete.html', context)类基
class DeleteView(LoginRequiredMixin, UserPassesTestMixin, DeleteView):
model = comment
success_url = '/'
def test_func(self):
comment= self.get_object()
if self.request.user == comment.user:
return True
return False确认页的html
{% extends 'blog/base.html' %}
{% block content %}
<form>
<p>are you sure you want to delete {{ comment }}</p>
<input type="submit" value="confirm" >
</form>
{% endblock %}models.py
class comment(models.Model):
post=models.ForeignKey(Blog, on_delete=models.CASCADE)
user=models.ForeignKey(User, on_delete=models.CASCADE)
content=models.TextField(max_length=160)
timestamp=models.DateTimeField(auto_now_add=True)
def __str__(self):
return '{}-{}'.format(self.post.title,str(self.user.username))
def get_absolute_url(self):
return reverse('comment', kwargs={"pk": self.pk})发布于 2019-03-13 15:08:01
问题在于你的模板,而不是你的视图。您需要向表单中添加method="post"以执行POST请求,并添加{% csrf_token %}以防止CSRF错误。
<form method="post">
{% csrf_token %}
<p>are you sure you want to delete {{ comment }}</p>
<input type="submit" value="confirm" >
</form>https://stackoverflow.com/questions/55145101
复制相似问题