def create_comment(request, thread_id, parent_id=None): if request.method == "POST": form = forms.CommentForm(request.POST) if form.is_valid(): if parent_id is None: parent = None else: parent = mods.Comment.objects.get(pk=parent_id) comment = mods.Comment.objects.create( author=request.user, body=form.cleaned_data["body"], thread_id=thread_id, parent=parent, ) return http.HttpResponseRedirect( f"{request.META.get('HTTP_REFERER')}{'#comment'}{comment.pk}") else: form = forms.CommentForm() return shortcuts.render( request, "comment_form.html", { "form": form, "thread_id": thread_id, "parent_id": parent_id }, )
def render_comments_list_for(context, thread_id): all_comments = mods.Comment.objects.filter(thread_id=thread_id) parents = [ (p, 0) for p in all_comments.filter(parent=None).order_by("created_at") ] html = [] last_indent = None while len(parents): p = parents.pop(0) if p == "end": html.append("end") continue p, indent = p html.append((p, indent)) last_indent = indent parents = ([(c, indent + 1) for c in p.children.order_by("created_at")] + ["end"] + parents) html = [p[0] if isinstance(p, tuple) else p for p in html] form = forms.CommentForm() comments = mods.Comment.objects.filter( thread_id="id").order_by("created_at") return { "html": html, "thread_id": thread_id, "form": form, "user": context["user"], }
def create_comment(request, pk): if request.method == "post": form = comment_form.CommentForm(request.POST) post = models.Post.objects.get_or_none(pk=pk) if not post: return redirect(reverse("core:home")) if form.is_valid(): comment = form.save() comment.post = post comment.writer = request.user return redirect(reverse("posts:detail", kwargs={"pk": post.pk}))
def post_comment(request, post_pk): post = get_object_or_404(Post, pk=post_pk) if request.method == 'POST': form = forms.CommentForm(request.POST) if form.is_valid(): comment = form.save(commit=False) comment.post = post comment.save() return redirect(post) else: comment_list = post.comments_set.all() context = {'post': post, 'comment_list': comment_list, 'form': form } return render(request, 'blog/detail.html', context=context) else: redirect(post)
def view_thread(request, thread_id): all_comments = mods.Comment.objects.filter(thread_id=thread_id) parents = [ (p, 0) for p in all_comments.filter(parent=None).order_by("created_at") ] html = [] last_indent = None while len(parents): p, indent = parents.pop(0) if last_indent is not None: if last_indent < indent: for _ in range(last_indent, indent): html.append("in") elif last_indent > indent: for _ in range(indent, last_indent): html.append("out") html.append((p, indent)) last_indent = indent parents = [(c, indent + 1) for c in p.children.order_by("created_at")] + parents # django templates don't support counting loops if html: last_indent = html[-1][1] for i in range(0, last_indent): html.append("out") html = [p[0] if isinstance(p, tuple) else p for p in html] form = forms.CommentForm() return shortcuts.render( request, "raw_comments_list.html", { "form": form, "thread_id": thread_id, "html": html }, )
def DetailHandler(request): art_id = int(request.GET.get("id", 0)) if art_id == 0: return HttpResponseRedirect("/art/index") #获取小说详情 art_queryset = models.Art.objects.get(id=art_id) #获取小说对应的章节 art_capters = models.Chapter.objects.filter(art=art_id) #获取评论表单 comment_form = forms.CommentForm() comment_list = Comment.objects.filter(art=art_id) context = dict( art=art_queryset, art_capters=art_capters, form=comment_form, comment_list=comment_list, comment_count=comment_list.count(), ) return render(request, "detail_handler.html", context=context)