본문 바로가기
개발/파이썬

전자상거래 웹사이트 만들기 5

by Engineer-Lee 2022. 5. 17.
반응형

만약 업로드된 물품이 하나도 없을 시 물품을 등록해달라는 문구를 홈페이지에 띄어진다면
사용자가 빈 홈페이지를 보는 것보다 덜 어색함을 느낄 것이다.

 

따라서 업로드한 물품 데이터를 먼저 삭제해보겠다.

장고 관리자 페이지에서도 삭제할 수 있지만 이번엔 장고ORM을 이용해서 지워보자

 

python manage.py shell 로 쉘을 열고

from store.models import Item 으로 Item 모델을 불러온다.

Item.objects.all().delete() 으로 모든 게시물을 삭제한다.

 

 

이제 item_list.html에 물품을 등록해달라는 문구를 넣는다,

업로드된 물품이 있을 때는 기존 코드가 수행되고

물품이 없을 때 등록된 물품이 없다는 글이 출력된다.

 

 

 

 

이번에는 http://127.0.0.1:8000/item/100/ 처럼 존재하지 않는 물품의 아이디의 url에 접근하려 했을 때 404에러를 일으켜보자

 

views.py에서 item_detail 함수를 수정한다.

get_object_or_404 메서드를 이용해서 아이템의 아이디가 존재할 때는 데이터객체를 가져오고 그렇지 않을 떄는 http404에러를 일으킨다.

마찬가지로 item_update와 item_delete도 똑같이 수정해준다.

404에러가 잘 출력된다.

 

 

 

 

 

만약 물품이 많이 등록되어진다면 홈페이지의 스크롤이 너무 길어질 것이다.

따라서 물품 리스트를 페이지를 통해 관리하는게 좋다.

먼저 테스트를 위한 더미 데이터를 시딩을 해보자

 

pip install django-seed==0.2.2 명령어를 입력해서 장고 시드를 설치한다.

그 후 settings.py에 INSTALLED_APPS에 'django_seed'를 추가한다.

 

다시 터미널에 python manage.py seed store --number=50 을 입력한다.

 

그럼 데이터 50개가 추가된걸 볼 수 있다.

 

 

이제 물품을 10개 단위로 나눠서 페이지를 나눠보자

일단 views.py에

from django.core.paginator import Paginator 를 통해 페이지네이터를 사용한다.

그리고 post_list 함수를 수정한다.

페이지네이터로 items를 10개 단위로 나눠서 페이지를 만든다,

우리는 page라는 네임으로 값을 전달했으므로 

GET.get('page')를 통해 page의 쿼리스트링에 접근한다.

만약 처음 메인페이지에 접근하면 아직 쿼리스트링이 붙지않은 상태여서 curr_page_number가 None일때 1로 설정해준다.

 

 

이제 item_list.html를 수정한다.

 

 

그럼 페이지네이션이 잘 적용된걸 볼 수 있다.

 

반응형