{% 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 가 들어가는 주소를 떠올려보면 알 것 같기도 하다.
기존 작성 코드
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 에 연결을 해 줘야 한다.
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 라는 변수에 들어가면서 함수를 실행하게 된다.
def board_detail(request, pk):
board = Board.objects.get(pk=pk)
# pk 에 해당하는 글을 가지고 올 수 있게 된다.
return render(request, 'board_detail.html', {'board':board})
# {'board':board} 로 템플릿에 전달해 준다.
제목 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 %}
다음은 없는 글에 대한 예외 처리와 로그인을 하지 않은 상태에서의 글쓰기 예외 처리에 대한 내용을 다룰 예정이다.