Django 로 게시판 만들기(18). 게시판 글 상세보기 MVT 패턴 만들기 - 3

.·2020년 7월 28일
0

게시판만들기

목록 보기
18/21

1. board_detail.html 만들기

  • board_write.html 에서 복사
  • 필요없는 코드 삭제
    1) 포스트에서 (POST) 데이터를 올리는 코드가 아니므로 csrf token 토큰 삭제
    2) 반복문과 조건문 삭제
    3) 게시판에서 각각의 글을 확인하는 것이므로 input (제목부분) 과 textarea 는 readonly 를 넣는다.
    4) 반복을 쓰지 않으므로 속성을 일일이 적용해 준다.
    5) < form blah blah > 부분 삭제
    6) 제목의 input 부분에 placeholder, name 속성 지우고 value="" 만들어 넣어 놓는다. 일단 비워 놓았다.
    7) textarea 에도 6) 과 같이 속성을지우고 class 와 readonly 만 남겨 놓는다.
    8) button 은 '돌아가기' 로 이름을 바꾸고 type="submit" 은 지운다. 폼이 아니므로.

중간 코드

{% extends "base.html" %}

{% block content %}
<div class="row mt-5">
  <div class="col-12">
    <div class="form-group">
      <label for="title">제목</label>
      <input
        type="text"
        class="form-control"
        id="title"
        value=""
        readonly
      />
      <label for="contents">내용</label>
      <textarea class="form-control" readonly></textarea>
    </div>
    <button class="btn btn-primary">돌아가기</button>
  </div>
</div>
{% endblock %}

이제 이 게시판 상세보기 페이지에서 값들을 넣어줘야 한다. 글마다 id 가 있을 것이고 그 id 마다 url 에 id 가 들어가는 주소를 떠올려보면 알 것 같기도 하다.

2. board/views.py 에 board_detail 함수 넣기

기존 작성 코드

def board_detail(request):
    return render(request, 'board_detail.html')

pk 값 적용 코드

def board_detail(request, pk):
    return render(request, 'board_detail.html')
    # 함수에서 몇 번째 글에 대한 것인지 정보를 전달할 설정이 필요함.

http://127.0.0.1:8000/board/detail/1/
http://127.0.0.1:8000/board/detail/2/
이렇게 주소로부터 값을 받아서 view 코드에서 활용하기 위해서는 위의 적용 코드 처럼 함수의 parameter 에 pk 를 넣어주고, board 의 url 에 연결을 해 줘야 한다.

3. board/urls.py 에 board_detail 경로 설정

from django.urls import path
from . import views

urlpatterns = [
    path('list/', views.board_list),
    path('write/', views.board_write),
    path('detail/<int:pk>/', views.board_detail),
]

urlpatterns 의 맨 아래 경로를 보면, board/detail/ 의 하위 경로가 숫자형(정수) 을 받는데 pk 라는 변수명으로 받을 것이며 그 뒤에 있는 숫자값이 pk 라는 변수에 들어가면서 함수를 실행하게 된다.

4. view 에서 board_detail 함수 작성

def board_detail(request, pk):
    board = Board.objects.get(pk=pk)
    # pk 에 해당하는 글을 가지고 올 수 있게 된다.
    
    return render(request, 'board_detail.html', {'board':board})
    # {'board':board} 로 템플릿에 전달해 준다.

5. 템플릿에 연결하기 (board_detail.html)

제목 input 의 value 부분과 textarea 의 컨텐츠 부분에 템플릿을 연결한다.

{% extends "base.html" %}

{% block content %}
<div class="row mt-5">
  <div class="col-12">
    <div class="form-group">
      <label for="title">제목</label>
      <input
        type="text"
        class="form-control"
        id="title"
        value="{{ board.title }}"
        readonly
      />
      <label for="contents">내용</label>
      <textarea class="form-control" readonly>{{ board.contents }}</textarea>
    </div>
    <button class="btn btn-primary">돌아가기</button>
  </div>
</div>
{% endblock %}

다음은 없는 글에 대한 예외 처리와 로그인을 하지 않은 상태에서의 글쓰기 예외 처리에 대한 내용을 다룰 예정이다.

profile
.

0개의 댓글