장고의
DetailView
제네릭 뷰를 상속받는 상속 페이지를 구현하는 방법을 알아본다.
기존에 작성된
함수형 뷰
post_detail
은 아래와 같다. 주석처리 해준다.
#views.py
# def post_detail(request, post_id):
# post = get_object_or_404(Post, id=post_id)
# context = {"post": post}
# return render(request, 'posts/post_detail.html', context=context)
DetailView를 상속받는 클래스형 뷰를 생성한다.
#views.py > PostDetailView
class PostDetailView(DetailView):
model = Post
template_name = "posts/post_detail.html"
pk_url_kwarg = "post_id"
context_object_name = "post"
접근할
모델
을 정의하고, 렌더할템플릿
을 정의하고, url로부터 전달받는인자
를 정의하고, 데이터에 접근하기 위해 사용될이름
을 정의한다.
마찬가지로
context_object_name
변수에 지정한값
을 이용해템플릿
에서 해당값
을 통해 데이터에 접근할 수 있다.
또한
DetailView
를 상속받기 위해서는 해당 클래스를 불러와야 한다.
url 패턴에서 post_detail을 PostDetailView로 변경해야 한다.
#urls.py
urlpatterns = [
# path('', views.index),
path('', views.PostListView.as_view(), name="post-list"),
path('posts/new/', views.PostCreateView.as_view(), name="post-create"),
path('posts/<int:post_id>/', views.PostDetailView.as_view(), name="post-detail"),
path('posts/<int:post_id>/edit/', views.post_update, name="post-update"),
path('posts/<int:post_id>/delete/', views.post_delete, name="post-delete"),
]