-
django FBV homeViewProject using python/Cloning Airbnb 2021. 2. 26. 11:00
urlpattenrs
core/urls.py
$ django-admin startapp core
CBV랑 다 똑같고 path의 두 번째 인자만 다르다. FBV는 CBV와 다르게 .as_view()를 사용하지 않는다. 왜냐하면 homeView 자체가 function이기 때문이다.
core/urls.py FBV(Function Based View)
rooms/views.py
FBV에서는 Paginator를 호출해서 paginator object를 직접 만들어줘야 한다. 그리고 render()를 사용해서 pages/root/home.html을 랜더링한다.
from django.shortcuts import render from django.core.paginator import Paginator, EmptyPage from . import models as room_models def homeView(request): try: # Get list of rooms rooms_list = room_models.Room.objects.all() # Get paginator page = int(request.GET.get("page", 1)) page_sector = (page - 1) // 5 page_sector = page_sector * 5 paginator = Paginator(rooms_list, 12, orphans=6) rooms = paginator.get_page(page) except EmptyPage: print("Empty page") return render( request, "pages/root/home.html", context={"rooms": rooms, "page_sector": page_sector}, )
templates
pages/root/home.html
html은 page=page_obj를 page=rooms로만 바꿔주면 된다. CBV에서는 page_obj를 자동으로 넘겨줬지만, FBV는 내가 직접 만들어서 줘야 하고, 내가 만든 page_obj는 rooms라는 이름으로 되어 있기 때문이다.
{% extends 'base.html' %} {% block page_title %}Home{% endblock page_title %} {% block content %} <div> <div> {% include 'mixins/room_card.html' with rooms=rooms %} <div> {% include 'mixins/page_number.html' with page=rooms %} </div> </div> </div> {% endblock content %}
참고 자료
- 노마드 코더의 Airbnb 클론 강의
소스 코드
github.com/zpskek/airbnb-clone-v3/commit/988426ef4c63bb78aff5b433bf10c26b4a8b7a2c
'Project using python > Cloning Airbnb' 카테고리의 다른 글
tailwindcss with gulp (0) 2021.02.28 django static files and header & footer (0) 2021.02.28 page_number.html (0) 2021.02.26 room_card.html and model function (0) 2021.02.26 django CBV HomeView (0) 2021.02.26