def post_detail_view(request, year, month, day, slug): post = get_object_or_404(Post, slug=slug, status='published', publish__year=year, publish__month=month, publish__day=day) #for comment purpose comments = post.comments.filter(active=True) csubmit = False if request.method == 'POST': form = CommentForm(request.POST) if form.is_valid(): new_comment = form.save( commit=False ) #User only take data like name,email,comment but we require more data related to post new_comment.post = post # post object is already there new_comment.save() csubmit = True else: form = CommentForm() return render(request, 'post/post_detail.html', { 'post': post, 'form': form, 'csubmit': csubmit, 'comments': comments })
def postdetail(request, slug): post = get_object_or_404(Post, slug=slug) comments = post.comments.all() new_comment = None if request.method == "POST": comment_form = CommentForm(data=request.POST) if comment_form.is_valid(): # Create Comment object but don't save to database yet new_comment = comment_form.save(commit=False) # Assign the current post to the comment new_comment.post = post # Save the comment to the database new_comment.save() return redirect(f"/{slug}") else: comment_form = CommentForm() return render( request, 'postdetail.html', { "post": post, "comments": comments, "new_comment": new_comment, "comment_form": comment_form, })
def new_single(request, pk): #ВИВІД ВСІЄЇ СТАТІ new = get_object_or_404(News, id=pk) comment = Com.objects.filter( new=pk ) #берем комент з бази + moderation=True якшо потрібно проходити провірку можератором if request.method == "POST": form = CommentForm(request.POST) #присвоюэм коменту користувача if form.is_valid(): #якшо пост то обробляэм і выдправляэм form = form.save(commit=False) form.user = request.user form.new = new form.save() return redirect(new_single, pk) #Якшо GET то відправляєм форму else: form = CommentForm() return render(request, 'post/new_single.html', { 'new': new, "comments": comment, "form": form })
def add_comment_to_post(request, pk): post = get_object_or_404(Post, pk=pk) if request.method == "POST": form = CommentForm(request.POST) if form.is_valid(): comment = form.save(commit=False) comment.post = post comment.author = request.user comment.author_id = request.user.id comment.save() return redirect("post_detail", pk=post.pk) else: form = CommentForm() return render(request, "add_comment_to_post.html", {"form": form})
def comment_modify(request, comment_pk): comment = get_object_or_404(Comment, pk=comment_pk) next = request.GET.get('next') if request.method == 'POST': form = CommentForm(request.POST, instance=comment) form.save() if next: return redirect(next) return redirect('post:post_detail', post_pk=comment.post.pk) else: form = CommentForm(instance=comment) context = { 'form': form, } return render(request, 'post/comment_modify.html', context)
def comment_create(request, post_pk): if not request.user.is_authenticated: return redirect('member:login') # URL get parameter로 온 'post_pk'에 해당하는 # Post instacne를 'post'변수에 할당 # 찾지못하면 404Error를 브라우저에 리턴 post = get_object_or_404(Post, pk=post_pk) if request.method == 'POST': # 데이터가 바인딩된 CommentForm인스턴스를 form에 할당 form = CommentForm(request.POST) # 유효성 검증 if form.is_valid(): # 통과한 경우, Post에 해당하는 Comment 인스턴스 생성 PostComment.objects.create(author=request.user, post=post, content=form.cleaned_data['content']) # post_list에서 오는 요청 처리 next = request.GET.get('next') print(next) if next: return redirect(next) # 생성 후 Post의 detail화면으로 이동 return redirect('post:post_detail', post_pk=post_pk)
def add_comment(request, post_id, obj_name, obj_id): if request.method == "POST": post = get_object_or_404(Post, pk=post_id) if obj_name == "post": parent_object = post elif obj_name == "comment": parent_object = get_object_or_404(Comment, pk=obj_id) else: return HttpResponseRedirect("/?err=postmucommentmiparentin") initial_data = {"post": post, "parent_object": parent_object, "user": request.user } if request.user.is_authenticated(): comment_form = CommentForm(request.POST, initial=initial_data) messages.info(request, _("your comment has been added")) else: comment_form = CommentForm_no_auth(request.POST, initial=initial_data) messages.info(request, _("your comment has been added but must confirm with email required ")) if comment_form.is_valid(): comment_form.save() return HttpResponseRedirect(reverse("detail", args=[post_id])) else: messages.warning(request, _("this comment is not valid ")) return HttpResponseRedirect(reverse("detail", args=[post_id])) else: return HttpResponseRedirect("/")
def get_context_data(self, **kwargs): context = super(BlogDetailView, self).get_context_data(**kwargs) context['form'] = CommentForm() context['comments'] = Comments.objects.filter(post_id=self.kwargs.get( 'post_id')).order_by('-created').select_related( 'user').select_related('user__userdetails') return context
def add_comment(request, pk): form = CommentForm(request.POST) post = get_object_or_404(Post, id=pk) if form.is_valid(): comment = Comment() comment.path = [] comment.comment_post = post comment.author = auth.get_user(request) comment.content = form.cleaned_data['comment_area'] comment.save() # Django не позволяет увидеть ID комментария по мы не сохраним его, # сформируем path после первого сохранения # и пересохраним комментарий try: comment.path.extend( Comment.objects.get( id=form.cleaned_data['parent_comment']).path) comment.path.append(comment.id) except ObjectDoesNotExist: comment.path.append(comment.id) comment.save() return redirect(comment.get_absolute_url())
def get_context_data(self, *, object_list=None, **kwargs): context = super(PostDetailView, self).get_context_data(**kwargs) context['title'] = f'{self.object.name}' context['tags'] = get_all_tags(self.object.pk) if self.request.method == 'GET': context['comments'] = Comment.objects.filter( comment_post=self.kwargs['pk']).order_by('path') if self.request.user.is_authenticated: context['form'] = self.comment_form if self.request.method == 'POST': form = CommentForm(self.request.POST) if form.is_valid(): comment = Comment(path=[], comment_post=self.object.pk, author=self.request.user, content=form.cleaned_data['comment_area']) comment.save() # сформируем path после первого сохранения # и пересохраним комментарий try: comment.path.extend( Comment.objects.get( id=form.cleaned_data['parent_comment']).path) comment.path.append(comment.id) # print('получилось') except ObjectDoesNotExist: comment.path.append(comment.id) # print('не получилось') comment.save() return context
def post_list(request): # (0621) 위 post_list_original() 함수뷰에서 posts가 Paginator를 통해 5개씩 출력하도록 수정 # 전체 Post 목록 QuerySet생성 (아직 평가되지 않은 상태) all_posts = Post.objects.all() # GET 파라미터에서 'page'값을 page_num 변수에 할당 (1. 오브젝트, 2. 개당 출력 갯수) paginator = Paginator(all_posts, 2) page = request.GET.get('page', 1) try: # Page형 오브제트를 돌려준다. posts = paginator.page(page) except PageNotAnInteger: posts = paginator.page(1) except EmptyPage: posts = paginator.page(paginator.num_pages) index = posts.number - 1 max_index = len(paginator.page_range) start_index = index - 3 if index >= 3 else 0 end_index = index + 3 if index <= max_index - 3 else max_index page_range = paginator.page_range[start_index:end_index] context = { 'posts': posts, 'page_range': page_range, 'comment_form': CommentForm(), } return render(request, 'post/post_list.html', context)
def comment_create(request, post_pk): # POST 요청을 받아 Comment객체를 생성 후 post_detail페이지로 redirect # CommentForm을 만들어서 해당 ModelForm안에서 생성/수정가능하도록 사용 # URL에 전달된 post_pk로 특정 Post 객체 가져옴 post = get_object_or_404(Post, pk=post_pk) # GET요청시 parameter중 'next'의 value값을 next_에 할당 next_ = request.GET.get('next') # CommentForm data binding form = CommentForm(data=request.POST) if form.is_valid(): # comment변수에 commit=False의 결과인 인스턴스를 할당 comment = form.save(commit=False) # comment의 author와 post를 각각 지정해준다. comment.author = request.user comment.post = post # save() 메서드 실행 comment.save() # next로 이동할 url이 있다면 그쪽으로 이동시킴 else: result = '<br>'.join(['<br>'.join(v) for v in form.errors.values()]) messages.error(request, result) if next_: return redirect(next_) # next_값이 없다면 post_detail로 이동 return redirect('post:post_detail', post_pk=post.pk)
def comment_modify(request, comment_pk): # 코멘트 수정창을 만들어 기존의 내용을 채워넣을 수 있게 해야한다. comment = get_object_or_404(Comment, pk=comment_pk) if request.method == "POST": form = CommentForm(data=request.POST, instance=comment) if form.is_valid(): form.save() # Form을 이용해 객체를 update시킴 (data에 포함된 부분만 update됨) # next_ = request.GET[] return redirect('post:post_list') else: form = CommentForm(instance=comment) context = { 'form': form, } return render(request, 'post/comment_modify.html', context)
def post_list_original(request): posts = Post.objects.all() context = { 'posts': posts, 'comment_form': CommentForm(), } return render(request, 'post/post_list.html', context)
def post_list(request): # 아직 평가되지 않은 전체 쿼리셋 들고오기 all_posts = Post.objects.all() # Paginator를 사용하여 모든 포스트를 5개씩 페이지 분할한 후 paginator변수에 할당 paginator = Paginator(all_posts, 5) # GET 파라미터에서 page의 value값을 page_num 변수에 할당 page_num = request.GET.get('page') # paginator의 페이지번호가 page_num인 포스트들을 posts변수에 할당 if page_num: posts = Post.objects.filter(page_num * 9).order_by('-created_date') elif not page_num: pass try: posts = paginator.page(page_num) # page_num이 숫자형이 아닐 경우에는 1번째 페이지의 posts을 가져옴 except PageNotAnInteger: posts = paginator.page(1) # 해당페이지번호가 없을 경우에는 paginator의 마지막 페이지의 posts을 가져옴 except EmptyPage: posts = paginator.page(paginator.num_pages) # 예외처리해준 posts 변수와 comment_form을 렌더링시키기 위해 딕셔너리 삽입 context = { 'posts': posts, 'comment_form': CommentForm(), } # post_list 템플릿에 만들어준 context dict를 넣어 렌더링함. return render(request, 'post/post_list.html', context)
def post_list(request): # 전체 Post목록 QuerySet생성 (아직 평가되지 않음) all_posts = Post.objects.all() # Paginator객체 생성, 한 페이지당 3개씩 p = Paginator(all_posts, 3) # GET parameter에서 'page'값을 page_num변수에 할당 page_num = request.GET.get('page') # Paginator객체에서 page메서드로 page_num변수를 인수로 전달하여 호출 try: posts = p.page(page_num) # 만약 page_num변수가 int형으로 변환이 불가능하면 except PageNotAnInteger: # 1페이지에 해당하는 Post object list를 posts에 할당 posts = p.page(1) # 만약 page_num에 객체가 없을 경우 (빈 페이지) except EmptyPage: # 마지막 페이지에 해당하는 Post object list를 posts에 할당 posts = p.page(p.num_pages) # render에 사용할 dict객체 context = { 'posts': posts, # 'comment_form': CommentForm(), 'comment_form': CommentForm(auto_id=False), } return render(request, 'post/post_list.html', context)
def detail_post_view(request, slug): context = {} user = request.user if not user.is_authenticated: return redirect("login") try: post = Post.objects.get(slug=slug) except Post.DoesNotExist: return redirect("home") context['current_post'] = post if Like.objects.filter(liker=user, post=post).exists(): context['liked'] = 'liked' comment = Comment.objects.filter(post=post) context['comments'] = comment like_count = Like.objects.filter(post=post).count() context['like_count'] = like_count form = CommentForm(request.POST) if form.is_valid(): obj = form.save(commit=False) obj.commenter = user obj.post = post obj.save() return redirect('post:detail_post' , post.slug) return render(request, 'post/detail_post.html', context)
def comment_create(request, post_pk): # POST요청을 받아 Comment객체를 생성 후 post_detail페이지로 redirect post = get_object_or_404(Post, pk=post_pk) next = request.GET.get('next') form = CommentForm(request.POST) # form 이 유효할 경우, Comment생성 if form.is_valid(): comment = form.save(commit=False) comment.author = request.user comment.post = post comment.save() mail_subject = '{}에 작성한 글에 {}님이 댓글을 작성했습니다'.format( post.created_date.strftime('%Y.%m.%d %H:%M'), request.user) mail_content = '{}님의 댓글\n{}'.format(request.user, comment.content) send_mail( mail_subject, mail_content, '*****@*****.**', [post.author.email], ) # message = EmailMessage(mail_subject, mail_content, to=[post.author.email]) # message.send() else: result = '<br>'.join(['<br>'.join(v) for v in form.errors.values()]) messages.error(request, result) if next: return redirect(next) return redirect('post:post_detail', post_pk=post.pk)
def comment_create(request, post_pk): # post = Post.objects.get(pk=post_pk) # form = CommentForm(data=request.POST) # user = request.user # if form.is_valid(): # Comment.objects.create(post=post, author=user, content=form.cleaned_data['content']) # return redirect('post:post_detail', post_pk) post = get_object_or_404(Post, pk=post_pk) form = CommentForm(data=request.POST) next = request.GET.get('next') if form.is_valid(): comment = form.save(commit=False) comment.author = request.user comment.post = post form.save() email = EmailMessage('댓글 알림', '당신의 포스트에 {}님의 댓글이 달렸습니다.'.format(request.user), to=[post.author.email]) email.send() else: e = '<br>'.join(['<br>'.join(v) for v in form.errors.values()]) messages.error(request, e) if next: return redirect(next) return redirect('post:post_detail', post_pk)
def post_detail(request, post_id): post = Post.objects.get(id=post_id) comment_form = CommentForm() context = { 'post': post, 'comment_form': comment_form, } return render(request, 'post/post_detail.html', context)
def add_comment(request, post_id): form = CommentForm(request.POST or None) if form.is_valid(): comment = form.save(commit=False) comment.save() return redirect('http://localhost:8000/posts/') return render(template_name='detail3.html', context={"form": form}, request=request)
def single_info(request, pk): info = get_object_or_404(Info, id=pk) comments = Comment.objects.filter(info=pk) if request.method == "POST": form = CommentForm(request.POST) if form.is_valid(): form = form.save(commit=False) form.client = request.user form.info = info form.save() return redirect(single_info, pk) else: form = CommentForm() return render(request, "info/info_single.html", { "info": info, "comments": comments, "form": form })
def comment(request): if request.method == 'POST': form = CommentForm(request.POST) if form.is_valid(): aid = form.cleaned_data['aid'] name = form.cleaned_data['name'] content = form.cleaned_data['content'] Comment.objects.create(aid=aid, name=name, content=content) return redirect('/post/article/?aid=%s' % aid) return redirect('/post/home/')
def post_detail(request, post_id): # 인자로 전달된 post_id와 일치하는 id를 가진 Post객체 하나만 조회 post = Post.objects.get(id=post_id) # Comment를 생성할 Form객체를 생성, 할당 comment_form = CommentForm() context = { 'post': post, 'comment_form': comment_form, } return render(request, 'post/post_detail.html', context)
def comment_modify(request, comment_pk): # CommentForm을 만들어서 해당 ModelForm안에서 생성/수정 가능하도록 comment = get_object_or_404(Comment, pk=comment_pk) next = request.GET.get('next') if request.method == 'POST': # Form을 이용해 객체를 update시킴 (data에 포함된 부분만 update됨) form = CommentForm(request.POST, instance=comment) if form.is_valid(): form.save() if next: return redirect(next) return redirect('post:post_detail', post_pk=comment.post.pk) else: # CommentForm에 기존 comment인스턴스의 내용을 채운 bound form form = CommentForm(instance=comment) context = { 'form': form, } return render(request, 'post/comment_modify.html', context)
def post_list(request): posts = Post.objects.exclude(author__isnull=True) comment_form = CommentForm() context = { 'posts': posts, 'comment_form': comment_form, } return render(request, 'post/post_list.html', context)
def post_list_original(request): # 모든 Post목록을 'posts'라는 key로 context에 담아 return render처리 # post/post_list.html을 template으로 사용하도록 한다 # 각 포스트에 대해 최대 4개까지의 댓글을 보여주도록 템플릿에 설정 posts = Post.objects.all() context = { 'posts': posts, 'comment_form': CommentForm(), } return render(request, 'post/post_list.html', context)
def addcomment(request, post_id): if request.POST and ('pause' not in request.session): form = CommentForm(request.POST) if form.is_valid(): comment = form.save(commit=False) comment.comments_post = Post.objects.get(id=post_id) comment.comments_date = datetime.now() comment.comments_author = User.objects.get(id=request.user.id) form.save() request.session.set_expiry(10) request.session['pause'] = True return redirect('/posts/get/{}/'.format(post_id))
def post_card(request, pk): post = get_object_or_404(Post, id=pk) comment = Comments.objects.filter(post=pk, moderation=True) if request.method == "POST": form = CommentForm(request.POST) if form.is_valid(): form = form.save(commit=False) form.user = request.user form.post = post form.save() return redirect(post_card, pk) else: form = CommentForm() return render( request, 'post/post_card.html', { 'post': post, # 'comments': comment, 'form': form })
def post_detail(request, post_pk): # post = Post.objects.get(pk=post_pk) # 겟을 했을 때 pk번호가 유효하지 않으면 # 500번대 서버 에러메시지를 보여주게 되는데 # 404 메시지를 보여주는게 좀더 정확하기 때문에 아래의 코드로 대체힌다. post = get_object_or_404(Post, pk=post_pk) comment_form = CommentForm() context = { 'post': post, 'comment_form': comment_form, } return render(request, 'post/post_detail.html', context)