1.에러데이터 처리
뷰를 다음과 같이 고친다.
from django.shortcuts import render, get_object_or_404
from .models import Photo
# Create your views here.
def photo_list(request):
photos = Photo.objects.all()
return render(request, 'photo/photo_list.html', {'photos': photos})
def photo_detail(request, pk):
photo = get_object_or_404(Photo, pk=pk)
return render(request, 'photo/photo_detail.html', {'photo': photo})
새로 나온 get_object_or_404()는 모델로부터 데이터를 찾아보고 만약 찾는 데이터가 없다면 404 에러를 반환하는 함수다.
→ 위 코드에서는 pk, 즉 우리 모델의 데이터들을 구분하는 Django 기본 ID값으로 데이터를 찾는다.
2. 상세페이지 만들기
photo/templates/photo 안에 상세페이지 html을 photo_detail.html이라는 이름으로 다음과 같이 만든다.
<html>
<head>
<title>Photo App</title>
</head>
<body>
<section>
<div>
<img src="{{ photo.image }}" alt="{{photo.title}}" width="300" />
<p>{{ photo.description }}</p>
<p>{{ photo.author }}, {{ photo.price }}원</p>
</div>
</section>
</body>
</html>
views.py에 관련 함수를 추가한다.
from django.shortcuts import render, get_object_or_404
def photo_detail(request, pk):
photo = get_object_or_404(Photo, pk=pk)
return render(request, 'photo/photo_detail.html', {'photo': photo})
pk, 즉 우리 모델의 데이터들을 구분하는 Django 기본 ID값으로 데이터를 찾는다. ( 어드민 페이지 참조 )
photo/url.py를 다음과 같이 고친다.
from django.urls import path
from . import views
urlpatterns = [
path('', views.photo_list, name='photo_list'),
path('photo/<int:pk>', views.photo_detail, name='photo_detail'),
]
pk라는 이름의 정수형 변수가 들어갈 자리를 설정한다.
photo_list.html 템플릿에 반영한다.
(본 페이지에서 상세페이지로 넘어가므로 본 페이지에도 상세페이지에 대한 내용이 반영되어야 한다.)
<html>
<head>
<title>Photo App</title>
</head>
<body>
<h1><a href="">사진 목록 페이지</a></h1>
<section>
{% for photo in photos %}
<div>
<h2>
<a href="{% url 'photo_detail' pk=photo.pk %}">{{photo.title}}</a>
</h2>
<img src="{{ photo.image }}" alt="{{photo.title}}" width="300" />
<p>{{ photo.description }}</p>
<p>{{ photo.author }}, {{ photo.price }}원</p>
</div>
{% endfor %}
</section>
</body>
</html>
url과 pk를 잘 담아서 mapping 해준다.
<결과화면>
photo_list.html에서 사진 제목을 클릭하면
다음과 같은 상세페이지 ( url = /photo/1(pk) ) 로 잘 넘어가는 것을 확인할 수 있다.
반응형
'Develop > Django(Exercise)_v1' 카테고리의 다른 글
7. 사진 게시물 수정 기능 만들기 (1) | 2023.09.17 |
---|---|
6. 사진게시물 작성기능 .with (csrf_token(보안)) (0) | 2023.09.17 |
4. ORM(Object Relation Mapping) (0) | 2023.09.15 |
3. Django Template / View (0) | 2023.09.14 |
2. Model 이해하기 (어드민 페이지 적용_Django.restAPI) (0) | 2023.09.07 |