본문으로 바로가기

redirect는 언제 어떻게 써야할까?

category TIL 2022. 10. 25. 11:28

이글은 정리글이 아니다. 지금 게시판을 만들면서 느낀점을 적을 예정이다.

바로 views.py 의 create_comment 함수와 urls.py의 post_detail 의  들고와서 보겠다.

@login_required(login_url='user:login')
def comment_create(request, post_id):
    post= get_object_or_404(Post, pk=post_id) #post_id를 이용해서 객체를 가져온다
    if request.method == 'POST':
        content=request.POST.get('content')

        if content == '':
            print(post.id)
            return redirect('post_detail', post_id=post.user)

        user=request.user
        print(post)
        PostComment.objects.create(
            content = content,
            user = user,
            post = post,
            )

        # return redirect('post_detail', id = post.id)
        context = {'post':post}
        return render(request, 'community/post_detail.html', context)

 

 if content == '':
            print(post.id)
            return redirect('post_detail', post_id=post.user)
path('<int:post_id>/', views.post_detail, name='post_detail')

comment_create 함수를 보면서 무슨 뜻인지 모르는 코드를 따로 빼봤다. 데이터를 전달하는게 가능한건지 어떻게 하는건지 공부해보니 dot notation 으로 post의 객체에서 id를 가져온다는 뜻이였다.

즉 post_id는 전역변수로 가져온 post객체의 id값을 가지게 되고(post_id=post.user) redirect하는 post_detail 함수 url에 전달해서  '<int:post_id>'  에 전달되며 결국엔 댓글에 내용이 없는데 post를 한다면 다시 post_detail 화면을 보여주려고 했던것이다.


post.id 를 정상적으로 입력했을때

정상적인 댓글을 입력했던 페이지가 그대로 redirect되고(위)

post.content 를 사용했을때는 post.content인 123123123이 url에 추가되었다. (아래)