예제 #1
0
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
    })
예제 #2
0
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,
        })
예제 #3
0
파일: views.py 프로젝트: MrYurchik/MainHW
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
    })
예제 #4
0
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})
예제 #5
0
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)
예제 #6
0
파일: views.py 프로젝트: 2siwon/instagram
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)
예제 #7
0
파일: views.py 프로젝트: iskeltan/blox
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("/")
예제 #8
0
 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
예제 #9
0
파일: views.py 프로젝트: isenhaim/SGProject
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())
예제 #10
0
파일: views.py 프로젝트: isenhaim/SGProject
    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
예제 #11
0
파일: post.py 프로젝트: lcgkiller/isnta
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)
예제 #12
0
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)
예제 #13
0
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)
예제 #14
0
def post_list_original(request):
    posts = Post.objects.all()
    context = {
        'posts': posts,
        'comment_form': CommentForm(),
    }
    return render(request, 'post/post_list.html', context)
예제 #15
0
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)
예제 #16
0
파일: post.py 프로젝트: franzkim/instagram
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)
예제 #17
0
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)
예제 #18
0
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)
예제 #19
0
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)
예제 #20
0
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)
예제 #21
0
파일: views.py 프로젝트: Ogeneral/website
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)
예제 #22
0
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
    })
예제 #23
0
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/')
예제 #24
0
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)
예제 #25
0
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)
예제 #26
0
파일: views.py 프로젝트: 2siwon/instagram
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)
예제 #27
0
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)
예제 #28
0
파일: views.py 프로젝트: petrosernivka/book
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))
예제 #29
0
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
        })
예제 #30
0
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)