카테고리 없음

개발 일지 4 - 게시글 상세페이지 만들기

sorecord 2024. 8. 18. 15:03

오늘 만들 코드

상세페이지를 만드는 것은 큰 어려움이 없을 것 같았다. 

링크를 달아서 게시글들을 연결하고 데이터 베이스에 저장된 값을 가져오면 되는 거니까. 

 

초반에 진행할때는 문제가 없다가 댓글 창 기능을 구현할 때 약간의 어려움을 겪었다. 

 

def post_detail(request, pk):
    post = get_object_or_404(Post_information, pk=pk)
    print(post)
    usernames = User_information.objects.values_list('username', flat=True)
    
    #comments = Comment.objects.filter(post=post)  # 댓글 모델을 사용하여 해당 게시물에 대한 댓글 가져오기

    post.views += 1
    post.save() 
    context = {
        'post': post,
        'user':request.session.get('username'),
        'user_check':usernames, # 유저 정보 데이터 베이스에서 유저 아이디 값을 가져와서 현재 들어와있는 유저가 usercheck안에 존재 하면 댓글 작성 가능하게 
        'other_posts': other_posts,
    }
    print(context)
    return render(request, 'book/post_detail.html', context)

 

오늘 최종적으로 구상한 view.py 안에 있는 post_detail함수이다. 중간 중간 print는 값이 잘 들어갔는지 확인을 하기 위한 코드다. 

 

원래는 extends라는 기능을 사용을 해서 게시물을 클릭을 하면 게시글에 들어간 후에 밑에 작성된 글을 쫙 나열되게끔 구현을 하고 싶었다. 

 

문제는 경로를 구현할때 발생했다.

내가 index.html에서 book/ 경로에서는 데이터 베이스에 저장된 게시물들의 정보를 불러올 수 있다.  

하지만 게시물을 클릭을 하면 해당 게시물로 넘어 갈 수 있게 book/1 , book/2 , book/3 이런 식으로 구현을 했다. 

 

    path('<int:pk>/', views.post_detail, name='post_detail'),
    #url.py에 작성한 코드
    
    <a href="{% url 'post_detail' post.pk %}" class="post-title">{{ post.title }}</a>
    #index.html에 작성한 코드

 

 

그렇게 되다 보니 당연하게도 게시물 아래에 목록은 만들어지지 않았다. 

 

결국에, 아래에 목록을 만들지 않고 위에 카테고리부분을 유지한채로 코드를 구성하기로 했다.

 

post.views+=1을 post_detail함수에 넣어서 클릭할 때마다 조회수가 늘어나는 기능을 구현했다.  

 

context에 실어서 보내는 값들 중에 usercheck와 user의 값을 보내는 이유는 댓글을 작성하는 문제 때문이다.

 

User_information이라는 데이터 베이스에 있는 회원이라면 댓글을 작성을 할 수 있게끔 구현하게 위해서 현재 로그인한 사람의 세션값과 데이터베이스에 있는 회원의 목록을 보냈다.