티스토리 뷰
[django 커뮤니티] 게시물 상세보기 ( views.py, html, templates, board_detail, urls.py), 게시물 <int:pk>
지휘리릭 2020. 1. 21. 19:59● 게시물 상세보기 views.py
from django.http import Http404
def board_detail(request, pk):
try:
board = Board.objects.get(pk=pk)
except Board.DoesNotExist:
raise Http404('해당 게시물을 찾을 수 없습니다.')
return render(requet, 'board_detail.html', {'board' : board})
- 생각보다 게시물 상세보기 함수는 간단하다. pk란, 데이터베이스에서 각각의 레코드를 식별하는 기본키 (Primary Key)이다. 다시 말해, 게시물 각각의 고유 번호가 된다.
- url에서 게시물 id 값을 받도록 하는데 이 값을 pk로 받아온다. 해당 pk값을 갖는 게시물이 존재한다면 board에 저장한다. 해당 게시물의 정보를 board_detail.html로 전달하여 화면에 표시할 수 있도록 한다.
- 만약 존재하지 않는 게시물인 경우의 예외처리를 위해 Http404 함수를 사용하여 오류 메세지를 출력한다.
존재하지 않는 게시물의 아이디 값을 입력한 경우, 아래와 같이 Not Found 404 오류 메세지가 출력된다.
● 게시물 상세보기 board_detail.html
{% extends 'base.html' %}
{% block contents %}
<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 type = "button" class = "btn btn-primary" onclick = "location.href = '/board/list/'">돌아가기</button>
</div>
</div>
{% endblock %}
- views.py 의 함수에서 넘겨받은 board의 정보만 출력하면 된다. 게시물 페이지에서는 글을 수정할 수 없도록 readonly 값을 태그에 넣어준다. 아래와 같은 화면으로 게시물 상세보기 페이지를 완성했다. 조금 어두운 테마를 사용해서 가독성이 안좋지만, 밝은 테마는 눈이 아파서 이걸로 했다.
- 그런데 왜 input type은 value 값으로 board 값을 주고 textarea는 왜 태그 사이에 board 값을 주는건가? 만약 input type에서 board 값을 태그 밖에 정의하면, 값은 나타나지만 아래와 같이 제목 칸 안에 들어가지 않는다. 아마도 textarea는 양끝 태그로 묶어줄 수 있기 때문이 아닐까.
● 게시판 urls.py
from django.urls import path, include
from . import views
urlpatterns = [
path('list/', views.board_list),
path('write/', views.board_write),
path('detail/<int:pk>/', views.board_detail),
]
- 게시물 상세보기에서는 각각의 게시물 아이디를 url에 넘겨줘야한다. 그러기 위해서 url 값을 설정할 때, detail/ 뒤에 int 형 변수가 추가되는 것을 명시한다. 그리고 그 값을 board_detail 함수에 pk라는 이름의 변수로 넘겨주게 된다. 그래서 위의 views 함수에서 pk 값을 받아올 수 있는 것이다.
- 게시물 목록 board_list.html 에서는 해당 게시물을 클릭했을 때, 게시물의 id 와 함께 넘겨주기 때문에 저 값을 받아올 수 있는 것이다.
'django project > 커뮤니티' 카테고리의 다른 글
- Total
- Today
- Yesterday
- django 태그
- django 개발일지
- UITableViewController Not Working
- iOS 화면 안나옴
- CellForRowAt 호출안됨
- 테이블출력안됨
- Django
- iOS 검은 화면
- 알파벳 카운팅
- pythonanywhere배포
- 까만 화면
- django clean
- CellForRowAt Not Called
- cleaned_data
- Firebase 데이터베이스 추천
- django tag
- iOS UITableView 출력안됨
- iOS 데이터베이스
- Realtime Database
- django pythoneverywhere
- pythonanywhere배포방법
- 장고 태그달기
- ModelForm Form 차이
- django 게시판
- 데이터베이스 추천
- 실시간 데이터베이스
- 장고 게시판
- django 로그인접근
- python 웹 배포
- 웹 배포
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |