□ 앞에서 우리는 게시물을 등록하고 게시되는 것을 구현했음
https://dandora-90.tistory.com/339
□ 이에 이어서 등록된 게시물만을 볼 수 있는 상세보기 페이지를 구현하고자함
□ 코드
○ T : Templete(템플릿)
- photo_list.html 코드 : 게시글 제목을 클릭하면 photo_detail urlname을 가진 화면으로 이동
<html>
<head>
<title>Photo App</title>
</head>
<body>
<h1><a href="">사진 목록 페이지</a></h1>
<h3><a href="{% url "photo_post" %}">Photo 등록</a></h3>
<section>
<!--템플릿태그-->
{% for photo in photos %}
<div>
<p>{{photo.pk}} 번쨰</p>
<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>
- photo_detail.html 코드 : 수정하기 버튼을 클릭하면 urlpatterns에서 정의한 photo_edit 페이지로 이동되도록 구현
<html>
<head>
<title>Photo App</title>
</head>
<body>
<!--템플릿태그-->
<a href="/">홈으로 돌아가기</a> <!--메인화면이동-->
<h1>{{photo.title}}</h1>
<h3>
<!-- url 호출시 photo_edit 함수 작동-->
<a href="{% url "photo_edit" pk=photo.pk %}">수정하기</a>
</h3>
<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>
○ V : View(뷰)
- get_object_or_404() : 모델로부터 데이터를 찾아보고 만약 찾는 데이터가 없다면 404 에러를 반환하는 함수임
- 등록된 게시글을 클릭하면 해당 글에대한 pk를 바탕으로 값을 가져와야하므로 pk를 매개변수로 받도록 지정
- photo_detail.html rendering 되며 등록된 게시글 pk에 부합하는 정보를 반환
from django.shortcuts import render, get_object_or_404, redirect #get_object_or_404 : 모델로부터 데이터를 찾아보고 만약 찾는 데이터가 없다면 404 에러 반환
from .models import Photo #orm을 활용해 app>photo 의 Photo 값을 호출
from .forms import PhotoForm #post 방식으로 받은 form 호출
#app photo 의 photo_list 함수 정의
def photo_list(request):
#app photo > model에서 정의한 클래스를 .object.all()로 모두 가져와 photos에 담음. photos는 템플릿파일에 활용됨.
photos = Photo.objects.all()
return render(request, "photo/photo_list.html",{"photos":photos})
#app photo 의 photo_detail 함수 정의
def photo_detail(request,pk):
photo = get_object_or_404(Photo, pk=pk)
return render(request,"photo/photo_detail.html", {"photo":photo})
○ URL
- View에서 정의한 photo_detial request시 photo_detail이라는 name으로 화면 전환
- 이떄 url 주소는 http://127.0.0.1:8000/photo/<int:pk>
from django.urls import path
from . import views
#app photo > view에서 정의한 photo_list 함수
urlpatterns = [
#"" 은 settings.py 에서 허용한 주소가 기본으로 들어감
path("", views.photo_list, name="photo_list"),
#models pk 정수형으로 들어가야하므로 <int:pk>
path("photo/<int:pk>/", views.photo_detail, name="photo_detail"), #상세보기
]
'Python > Django Ⅱ' 카테고리의 다른 글
Django 게시물 수정하기 (0) | 2024.05.14 |
---|---|
Django Form 기능 / 게시물 등록하기 (0) | 2024.05.14 |
V : View(뷰) (0) | 2024.05.03 |
T : Template(템플릿) (0) | 2024.05.03 |
M : Model(모델) (1) | 2024.05.02 |