Project using python/Cloning Airbnb
django conversation-list by FBV with ListView
Cog Factory
2021. 4. 23. 17:05
url 설정
config/urls.py
urlpatterns = [
path("conversations/", include("conversations.urls", namespace="conversations")),
]
conversations/urls.py
from django.urls import path
from . import views
app_name = "conversations"
urlpatterns = [
path(
"conversation-list/",
views.ConversationList.as_view(),
name="conversation-list",
),
]
templates
pages/conversations/conversation_host_list.html
{% extends 'base.html' %}
{% block page_title %}
{{request.user}}'s Conversation List
{% endblock page_title %}
{% block content %}
<div class="flex flex-col items-center justify-items-center">
<div class="w-10/12">
<div class="grid grid-cols-4 gap-4">
{% for conversation in conversations %}
<a href="{% url 'conversations:conversation-detail' conversation.pk %}" class="border border-gray-500 p-6 rounded-lg flex justify-center items-center">
{% include 'mixins/conversation_avatars.html' with conversation=conversation %}
</a>
{% endfor %}
</div>
<div class="flex justify-center mt-20 itmes-center">
{% include 'mixins/page_number.html' with page=rooms %}
</div>
</div>
</div>
{% endblock content %}
CBV(Class Based View)
conversations/views.py
CBV는 django에서 정의한 여러가지 View들을 이용한다. 그 중 DetailView를 이용해서 conversations-detail page를 작성한다.
# conversations/views.py
from django.views.generic import ListView
from conversations import models as conversation_models
from users import mixins
class ConversationList(mixins.LoggedInOnlyView, ListView):
""" Conversation List View Definition """
template_name = "pages/conversations/conversation_host_list.html"
context_object_name = "conversations"
paginate_by = 12
paginate_orphans = 6
ordering = "created"
def get_queryset(self):
return conversation_models.Conversation.objects.filter(
participants=self.request.user
)
def get_context_data(self, **kwargs):
page = int(self.request.GET.get("page", 1))
if page == "":
page = 1
else:
page = int(page)
page_sector = (page - 1) // 5
page_sector = page_sector * 5
context = super().get_context_data()
context["page_sector"] = page_sector
return context
참고 자료
- 노마드 코더의 Airbnb 클론 강의
소스 코드
github.com/zpskek/airbnb-clone-v3/commit/fd430767d028f789dd3bf19b6837133bfcfd1fb5