[REAL Python – Django] – “Django – post 리스트 페이지, 상세 페이지(CBV)”

[REAL Python – Django] – “Django – post 리스트 페이지, 상세 페이지(CBV)”

2월 11, 2022

Django의 ListView() 클래스로 리스트 페이지 만들기

from django.shortcuts import render
from django.views.generic import ListView
from .models import Post


class PostList(ListView):
    model = Post # model을 정해 줌.

위의 코드를 추가했습니다. 클래스를 기반으로 페이지를 만드는 것입니다. PostList 클래스는 ListView 클래스를 상속한 것임을 이제는 알 수 있겠죠?

urlpatterns = [
    path('', views.PostList.as_view()),
    # path('', views.index), # blog/ 면 views의 index() 함수를 수행
    path('<int:pk>/', views.single_post_page),
]

url 패턴 부분도 수정해주겠습니다. 2줄에 보면, /blog/로 끝난다면 views.PostList.as_view() 가 처리하게끔 되어 있네요.

장고의 ListView 클래스는 모델 이름 뒤에 _list 가 붙은 파일을 템플릿으로 사용하게끔 되어 있습니다. 예전에 만들어 두었던 index.htmlpost_list.html로 이름을 바꾸어 주겠습니다.

ListView에서 만들어진 모델을 템플릿에서 가져오려면 object_list 를 사용하면 됩니다. for문 부분을 바꾸어 주면 되겠죠.

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>Blog</title>
</head>
<body>
<h1>Blog</h1>

{% for p in object_list %} <!-- post_list 도 인식함. !-->
    <hr/>
    <h2><a href="{{ p.get_absolute_url }}">{{ p.title }}</a></h2>
    <h4>{{ p.created_at }}</h4>
    <p>{{ p.content }}</p>
{% endfor %}
</body>
</html>

Django의 ListView() 클래스로 상세 페이지 만들기

위와 비슷한 방법으로 상세 페이지를 만들 수 있었습니다.

class PostDetail(DetailView):
    model = Post

위의 코드를 views.py 에 추가해 주었습니다.

urlpatterns = [
    path('', views.PostList.as_view()),
    path('<int:pk>/', views.PostDetail.as_view())
]

위에서와 마찬가지로 클래스를 이용하도록 코드를 작성해 주었습니다. 템플릿 이름은 모델명_detail.html 을 찾게 되므로 이름도 수정해 주었습니다.

Leave A Comment

Avada Programmer

Hello! We are a group of skilled developers and programmers.

Hello! We are a group of skilled developers and programmers.

We have experience in working with different platforms, systems, and devices to create products that are compatible and accessible.