지난 포스팅에서는 방들의 리스트를 페이지로 나눠보면서 함수 기반 뷰(FBV)와 클래스 기반 뷰(CBV)를 비교했다.
2020/11/14 - [Python/Django] - [Django] 함수 기반 뷰 vs. 클래스 기반 뷰 #ListView
이번 포스팅에서는 방들을 클릭하면 나오는 세부사항을 FBV와 CBV를 사용해서 웹페이지를 제작하고 비교해보려한다.
우선 사용할 템플릿 파일은 아래와 같다.
{% extends "base.html" %}
{% block page_name %}
Home
{% endblock page_name %}
{% block content %}
<div>
<h1>{{room.name}}</h1>
<h3>{{room.description}}</h3>
</div>
<div>
<h2>By: {{room.host.username}}
{% if room.host.superhost %}
(superhost)
{% endif %}
</h2>
<h3>Amenities<h3>
<ul>
{% for a in room.amenities.all %}
<li>{{a}}</li>
{% endfor %}
</ul>
<h3>Facilities<h3>
<ul>
{% for a in room.facilities.all %}
<li>{{a}}</li>
{% endfor %}
</ul>
<h3>House Rule<h3>
<ul>
{% for a in room.house_rules.all %}
<li>{{a}}</li>
{% endfor %}
</ul>
</div>
{% endblock %}
함수 기반 뷰(Funtion Based Views)
def room_detail(request, pk):
try:
room = models.Room.objects.get(pk=pk)
return render(request, "rooms/detail.html", {"room": room})
except models.Room.DoesNotExist:
raise Http404()
방 링크를 클릭하면 pk를 받아와 Room모델에서 가져와 템플릿으로 넘겨주고 없는 방의 id를 받는다면 404에러를 띄운다.
위와 같은 페이지을 클래스 기반 뷰(Class Based Views)를 사용해 구현한다면 어떻게 해야할까?
놀랍게도 두 줄만 있으면 된다!
class RoomDetail(DetailView):
""" RoomDetail Definition """
model = models.Room
※ urls.py 확인
'Web developer > Django' 카테고리의 다른 글
[Django] 카카오 로그인 (1) | 2020.12.24 |
---|---|
[Django] 함수 기반 뷰 vs. 클래스 기반 뷰 #ListView (0) | 2020.11.14 |
[Django] 장고 템플릿 #2 (0) | 2020.11.13 |
[Django] 장고 템플릿 #1 (0) | 2020.11.13 |
[Django] 쿼리셋(Query sets) (0) | 2020.11.09 |
댓글