from django.views.generic.list import ListView
from .models import Post
class PostListView(ListView):
model = Post
paginate_by = 10
template_name
기본 값은 <app_name>/<model_name>_list.html
이다.pagenate_by
속성으로써 한 화면에 보여지는 Object의 개수를 조절할 수 있다.object_list
(QuerySet)
- page_obj
(Page)
- paginator
(Paginator)
- is_paginated
(boolean)<!DOCTYPE html>
<!-- board/templates/board/post_list.html -->
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Post List - Seminar5</title>
</head>
<body>
{% if messages %}
<ul class="messages">
{% for msg in messages %}
<li>{{ msg }}</li>
{% endfor %}
</ul>
{% endif %}
<div class="list">
<ul>
{% for obj in object_list %}
<li><a href="{% url 'post_detail' pk=obj.id %}">{{ obj.title }}</a></li>
{% endfor %}
</ul>
</div>
<div class="paginator">
{% if page_obj.has_previous %}
<a href="?page={{ page_obj.previous_page_number }}">Previous</a>
{% endif %}
<span class="current">
Page {{ page_obj.number }} of {{ paginator.num_pages }}.
</span>
{% if page_obj.has_next %}
<a href="?page={{ page_obj.next_page_number }}">Next</a>
{% endif %}
</div>
<div class="footer">
<a href="{% url 'post_create' %}">Write New Post</a>
</div>
</body>
</html>
seminar5.urls
를 참조하여 올바른 상대 경로를 구한다.
'post_detail'
은 board.urls
에 정의한 path()
의 name
이다.pk=obj.id
는 URL에 정의된 매개변수를 지정해준다.paginator
: Paginator
num_pages()
: 전체 페이지 수page_obj
: Page
has_next()
: Returns True if there’s a next page.has_previous()
: Returns True if there’s a previous page.next_page_number()
: 다음 페이지 번호previous_page_number()
: 이전 페이지 번호{% if messages %}
는 PostDeleteView
에서 django.contrib.messages
를 사용하기 위함