Project using python/Cloning Airbnb
django FBV homeView
Cog Factory
2021. 2. 26. 11:00
urlpattenrs
core/urls.py
$ django-admin startapp core
CBV랑 다 똑같고 path의 두 번째 인자만 다르다. FBV는 CBV와 다르게 .as_view()를 사용하지 않는다. 왜냐하면 homeView 자체가 function이기 때문이다.
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