상세페이지를 만드는 것은 큰 어려움이 없을 것 같았다.
링크를 달아서 게시글들을 연결하고 데이터 베이스에 저장된 값을 가져오면 되는 거니까.
초반에 진행할때는 문제가 없다가 댓글 창 기능을 구현할 때 약간의 어려움을 겪었다.
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이라는 데이터 베이스에 있는 회원이라면 댓글을 작성을 할 수 있게끔 구현하게 위해서 현재 로그인한 사람의 세션값과 데이터베이스에 있는 회원의 목록을 보냈다.