Waffle-Skile.github.io

PostListView

from django.views.generic.list import ListView
from .models import Post

class PostListView(ListView):
    model = Post
    paginate_by = 10
  1. django.views.generic.list.ListView
  2. Documentation : Generic Display Views/ListView
  3. MultipleObjectTemplateResponseMixin
    • template_name 기본 값은 <app_name>/<model_name>_list.html이다.
  4. MultipleObjectMixin
  5. pagenate_by 속성으로써 한 화면에 보여지는 Object의 개수를 조절할 수 있다.
  6. 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>
  1. DTL에서는 method를 호출할 때 뒤에 괄호를 붙이지 않는다.
  2. URL tagseminar5.urls를 참조하여 올바른 상대 경로를 구한다.
    • 'post_detail'board.urls에 정의한 path()name이다.
    • 뒤의 pk=obj.id는 URL에 정의된 매개변수를 지정해준다.
  3. paginator : Paginator
    • num_pages() : 전체 페이지 수
  4. 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() : 이전 페이지 번호
  5. {% if messages %}PostDeleteView에서 django.contrib.messages를 사용하기 위함

Go back to Lecture 5