django project/쇼핑몰
[django 쇼핑몰] Product Detail 상품 상세보기 (DetailView, views.py, templates, product_detail.html)
지휘리릭
2020. 1. 24. 16:04
● 상품 상세보기
product/views.py
- 존재하는 모든 상품의 정보를 가져온다. 만약 모든 제품이 아니라 특정 제품만 표시하고싶다면 필터링 지정하면 된다. 어떤식으로 queryset에 저장되는지 궁금해서 출력해봤더니 queryset은 상품의 객체를 리스트 형태로 가져오는 것을 알 수 있다.
- 렌더링할 product_detail.html 에 queryset을 전달하는데 'product'라는 이름으로 전달되도록 한다. 만약 context_object_name 을 따로 지정하지 않으면 default 값은 object가 된다.
class ProductDetailView(DetailView):
template_name = "product_detail.html"
queryset = Product.objects.all()
context_object_name = 'product'

templates/product_detail.html
- ProductDetailView에서 전달받은 product 객체의 정보를 화면에 표시한다.
- 상품 설명란에 있는 | safe 처리를 하지 않으면 summernote 에 작성한 글들과 사진들이 모두 태그가 텍스트 형태로 나타난다. 태그를 텍스트 형태가 아닌 태그 자체로 인식하기 위해서 | safe 를 추가하는 것이다.
{% extends 'base.html' %}
{% load humanize %}
{% block contents %}
<div class = "row mt-5">
<div class = "col-12">
<div class = "card" style = "width:100%">
<div class = "card-body">
<h5 class = "card-title">{{product.name}}</h5>
</div>
<ul class = "list-group list-group-flush">
<li class = "list-group-item">상품 가격 : {{ product.price | intcomma }} 원</li>
<li class = "list-group-item">남은 수량 : {{ product.stock}}</li>
<li class = "list-group-item">등록 날짜 : {{ product.registered_date|date:'Y-m-d H:i'}}</li>
<li class = "list-group-item">{{ product.description|safe }} </li>
</ul>
</div>
</div>
</div>
{% endblock %}
상품 상세보기 페이지로 들어가면 다음과 같이 나온다. 사진과 글이 태그로 인식되어 잘 나오는 것을 알 수 있다.
