【发布时间】:2021-02-26 13:16:23
【问题描述】:
显示回复按钮应针对不同的 cmets 。当我按下显示回复按钮时,它会打开不属于该评论的不同回复。
- views.py
from django.shortcuts import render, HttpResponse, redirect,reverse from fitness.models import Post, BlogComment from django.contrib.auth.models import User from fitness.templatetags import extras # Create your views here. def fitness(request): everypost=Post.objects.all() context={"everypost":everypost} return render(request, "fitness/fit.html", context) def blogfit(request, slug): post=Post.objects.filter(slug=slug).first() comments= BlogComment.objects.filter(post=post, parent=None) replies= BlogComment.objects.filter(post=post).exclude(parent=None) replyDict={} for reply in replies: if reply.parent.sno not in replyDict.keys(): replyDict[reply.parent.sno]=[reply] else: replyDict[reply.parent.sno].append(reply) context={"post":post, 'comments': comments, 'user': request.user, 'replyDict': replyDict} return render(request, "fitness/blogfit.html", context) def postComment(request): if request.method == "POST": comment=request.POST.get('comment') user=request.user postSno =request.POST.get('postSno') post= Post.objects.get(sno=postSno) parentSno= request.POST.get('parentSno') if parentSno=="": comment=BlogComment(comment= comment, user=user, post=post) comment.save() else: parent= BlogComment.objects.get(sno=parentSno) comment=BlogComment(comment= comment, user=user, post=post , parent=parent) comment.save() return HttpResponse(reverse('fitness:fitness'))
- Models.py
from django.db import models from ckeditor.fields import RichTextField from django.contrib.auth.models import User from django.utils.timezone import now # Create your models here. class Post(models.Model): sno=models.AutoField(primary_key=True) title=models.CharField(max_length=255) author=models.CharField(max_length=14) slug=models.CharField(max_length=130) timeStamp=models.DateTimeField(blank=True) content=RichTextField(blank=True, null=True) def __str__(self): return self.title + " by " + self.author class BlogComment(models.Model): sno= models.AutoField(primary_key=True) comment=models.TextField() user=models.ForeignKey(User, on_delete=models.CASCADE) post=models.ForeignKey(Post, on_delete=models.CASCADE) parent=models.ForeignKey('self',on_delete=models.CASCADE, null=True ) timestamp= models.DateTimeField(default=now) def __str__(self): return self.comment[0:13] + "..." + "by" + " " + self.user.username
-
HTML页面
<h2 class="blog-post-title">{{post.title}}</h2> <p class="blog-post-meta">{{post.timeStamp}} by <a href="#">{{post.author}}</a></p> <p>{{post.content|safe}}</p> <hr> </div> </div> </div> {% if user.is_authenticated %} <form action="{% url 'fitness:postComment' %}" method="post"> {% csrf_token %} <div class="form-group"> <label for="exampleInputEmail1">Post Comment </label> <input type="text" class="form-control" name="comment" placeholder="Enter comment here"> </div> <input type="hidden" name="postSno" value="{{post.sno}}"> <input type="hidden" name="parentSno" value=""> <button type="submit" class="btn btn-primary">Submit</button> </form> {% else %} Please login to post a comment {% endif %} </div> {% for comment in comments %} <div class="row my-3"> <div class="col-md-1 "> <img class="rounded mx-auto d-block w-100 border border-dark p-2" src="http://i9.photobucket.com/albums/a88/creaticode/avatar_1_zps8e1c80cd.jpg" alt="user"> </div> <div class="col-md-11 "> <h6 class="comment-name by-author"> {{comment.user.username}} </h6> <span class="badge badge-secondary "></span> <b> {{comment.comment}} </b> <span class="badge badge-secondary "></span><br> <button class="btn btn-sm btn-primary" type="button" data-toggle="collapse" data-target="#replyBox{{comment.sno}}" aria-expanded="false" aria-controls="replyBox{{comment.sno}}"> Reply </button> <button class="btn btn-sm btn-primary" type="button" onClick="myFunction()" id= "show-hide" > Show Replies </button> <div class="reply mx-0" > <div class="collapse" id="replyBox{{comment.sno}}"> <div class="card card-body my-2" > <form action="{% url 'fitness:postComment' %}" method="post"> {% csrf_token %} <div class="form-group" > <label for="comment">Post a reply </label> <input type="text" class="form-control" name="comment" placeholder="Enter comment here"> <input type="hidden" name="parentSno" value="{{comment.sno}}"> </div> <input type="hidden" name="postSno" value="{{post.sno}}"> <button type="submit" class="btn btn-primary">Submit</button> </form> </div> </div> <div class="replies bg-danger my-2" id = "replies" > {% for reply in replyDict|get_val:comment.sno %} <div class="replies">{{reply}}</div> <br> {% endfor %} </div> </div> </div> </div> {% endfor %} <!-- Contenedor Principal --> <script> function myFunction(){ var x = document.getElementById("replies"); if(x.style.display === "none"){ x.style.display = "block"; } else{ x.style.display = "none"; } } </script>
我认为这是一个逻辑错误。有人可以帮我找出这个错误吗?虽然一切正常,但我的回复按钮无法正常工作。
【问题讨论】:
-
replies= BlogComment.objects.filter(post=post)..这是问题所在..您收到的所有回复都是帖子..不是评论