카테고리 없음
Chapter 2-5 Django - 북마크 목록 및 상세 페이지 구현
Chansman
2025. 4. 30. 16:50
📝 Django - 북마크 목록 및 상세 페이지 구현
이번 수업에서는 Django를 이용해 북마크 목록과 상세 페이지를 구현하는 과정을 학습하였습니다. 슈퍼유저 생성부터 ORM 데이터 처리, 템플릿 구성, 예외처리까지 단계적으로 구성된 수업입니다.
1️⃣ 서버 실행 및 관리자 계정 생성
- python manage.py runserver 명령어로 로컬 서버 실행
- 어드민 페이지 접속: http://localhost:8000/admin
- 슈퍼유저 생성: python manage.py createsuperuser
- 최소 3개 이상의 북마크 데이터를 등록해 테스트 준비
2️⃣ 뷰(Views)에서 목록 데이터 가져오기
- from bookmark.models import Bookmark 로 모델 임포트
- ORM 메서드 Bookmark.objects.all() 을 이용해 모든 북마크 조회
- 조회 결과를 컨텍스트에 담아 템플릿으로 전달:
- context = { 'bookmarks': bookmarks } return render(request, 'bookmark_list.html', context)
📌 View 코드 작성 (views.py)
from django.shortcuts import render
from bookmark.models import Bookmark
def bookmark_list(request):
bookmarks = Bookmark.objects.all() # SELECT * FROM bookmark
context = {'bookmarks': bookmarks}
return render(request, 'bookmark_list.html', context)
3️⃣ 템플릿에 북마크 목록 출력
- bookmark_list.html 파일에 for 문으로 목록 출력:
- {% for bookmark in bookmarks %} <p><a href="/bookmark/{{ bookmark.id }}/">{{ bookmark.name }}</a></p> {% endfor %}
- 각 북마크 클릭 시 상세 페이지로 이동
📌 Template 작성 (bookmark_list.html)
{% for bookmark in bookmarks %}
<p>
<a href="/bookmark/{{ bookmark.id }}/">{{ bookmark.name }}</a>
</p>
{% endfor %}
4️⃣ 상세 페이지 구현
- URL에서 <int:pk>/ 패턴으로 아이디(PK) 전달받음
- 뷰에서 Bookmark.objects.get(pk=pk)로 단일 객체 조회
- 템플릿에 전달할 때 컨텍스트에 객체 자체 전달:
- context = { 'bookmark': bookmark } return render(request, 'bookmark_detail.html', context)
- 템플릿 bookmark_detail.html에서는 다음과 같이 출력:
- <h1>{{ bookmark.name }} 페이지입니다.</h1> <a href="{{ bookmark.url }}" target="_blank">링크</a>
📌 View 코드 수정
from django.shortcuts import render, get_object_or_404
from bookmark.models import Bookmark
def bookmark_detail(request, pk):
bookmark = get_object_or_404(Bookmark, pk=pk)
context = {'bookmark': bookmark}
return render(request, 'bookmark_detail.html', context)
📌 Template 작성 (bookmark_detail.html)
<h1>{{ bookmark.name }} 페이지입니다</h1>
<a href="{{ bookmark.url }}" target="_blank">링크로 이동</a>
📌 URL 패턴 추가 (urls.py)
from django.urls import path
from bookmark import views
urlpatterns = [
path('bookmark/', views.bookmark_list),
path('bookmark/<int:pk>/', views.bookmark_detail),
]
5️⃣ URL 오류 처리 (404 예외 처리) views.py
-
- 존재하지 않는 ID 접근 시, 서버 오류(500)가 아닌 사용자 오류(404)로 처리해야 함
- 방법 1: try-except + raise Http404()
-
from django.http import Http404 try: bookmark = Bookmark.objects.get(pk=pk) except Bookmark.DoesNotExist: raise Http404("Bookmark does not exist")
-
- 방법 2: 내장 함수 get_object_or_404() 사용
from django.shortcuts import get_object_or_404
bookmark = get_object_or_404(Bookmark, pk=pk)
✅ 더 간결하게 get_object_or_404() 함수 사용을 권장
4️⃣ 상세 페이지 구현
- URL에서 <int:pk>/ 패턴으로 아이디(PK) 전달받음
- 뷰에서 Bookmark.objects.get(pk=pk)로 단일 객체 조회
- 템플릿에 전달할 때 컨텍스트에 객체 자체 전달:
- context = { 'bookmark': bookmark } return render(request, 'bookmark_detail.html', context)
- 템플릿 bookmark_detail.html에서는 다음과 같이 출력:
- <h1>{{ bookmark.name }} 페이지입니다.</h1> <a href="{{ bookmark.url }}" target="_blank">링크</a>
5️⃣ URL 오류 처리 (404 예외 처리)
- 존재하지 않는 ID 접근 시, 서버 오류(500)가 아닌 사용자 오류(404)로 처리해야 함
- 방법 1: try-except + raise Http404()
- from django.http import Http404 try: bookmark = Bookmark.objects.get(pk=pk) except Bookmark.DoesNotExist: raise Http404("Bookmark not found")
- 방법 2: 내장 함수 get_object_or_404() 사용
- from django.shortcuts import get_object_or_404 bookmark = get_object_or_404(Bookmark, pk=pk)
6️⃣ 주요 학습 포인트 요약
- ✅ 북마크 리스트 → 템플릿 for문 사용으로 출력
- ✅ 북마크 상세 → get() 또는 get_object_or_404()로 단일 데이터 처리
- ✅ URL 연결 시 <int:pk>/ 로 식별자 전달
- ✅ 잘못된 URL 접근 시 404 오류 처리로 UX 향상
- ✅ URL 링크는 target="_blank"로 새창에서 열리도록 처리
💡 보너스 팁
- 장고는 models.py의 필드명이 잘못되더라도 오류가 나지 않기 때문에, 데이터가 비어있는 경우 HTML 엘리먼트만 출력될 수 있음 → 반드시 변수명을 정확히 확인할 것
👏 수고하셨습니다! 다음 수업에서는 폼을 통해 데이터를 입력하고 저장하는 기능을 다룰 예정입니다.