{% raw %}
from django.views.generic.list import ListView
from .models import Post
class PostListView(ListView):
model = Post
paginate_by = 10
- django.views.generic.list.ListView
- Documentation : Generic Display Views/ListView
- MultipleObjectTemplateResponseMixin
template_name
기본 값은<app_name>/<model_name>_list.html
이다.
- MultipleObjectMixin
pagenate_by
속성으로써 한 화면에 보여지는 Object의 개수를 조절할 수 있다.- context로 다음 요소들을 넘겨준다.
-
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>
- DTL에서는 method를 호출할 때 뒤에 괄호를 붙이지 않는다.
- URL tag는
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
를 사용하기 위함
- PostDeleteView에서 다시 설명함
- cf. Displaying messages
{% endraw %}