ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • django FBV homeView
    Project 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

    댓글

Designed by Tistory.