Commit 9bae7a9f authored by impfundev's avatar impfundev

feat: pagination

parent 97794f84
<div class="table-responsive"> <table class="table table-hover">
<table class="table table-hover"> <thead>
<thead> <tr class="table-primary">
<tr class="table-primary"> <th scope="col">Book</th>
<th scope="col">Book</th> <th scope="col">Member</th>
<th scope="col">Member</th> <th scope="col">Librarian</th>
<th scope="col">Librarian</th> <th scope="col">Loan Date</th>
<th scope="col">Loan Date</th> <th scope="col">Due Date</th>
<th scope="col">Due Date</th> <th scope="col">Return Date</th>
<th scope="col">Return Date</th> <th scope="col"></th>
<th scope="col"></th> </tr>
</tr> </thead>
</thead> <tbody>
<tbody> {% if book_loans %} {% for loan in book_loans %}
{% if book_loans %} {% for loan in book_loans %} <tr>
<tr> <td>{{ loan.book.title }}</td>
<td>{{ loan.book.title }}</td> <td>{{ loan.member.name }}</td>
<td>{{ loan.member.name }}</td> <td>{{ loan.librarians.name }}</td>
<td>{{ loan.librarians.name }}</td> <td>{{ loan.loan_date }}</td>
<td>{{ loan.loan_date }}</td> <td>{{ loan.due_date }}</td>
<td>{{ loan.due_date }}</td> <td>{{ loan.return_date }}</td>
<td>{{ loan.return_date }}</td> <td class="d-flex gap-2 py-4">
<td class="d-flex gap-2 py-4"> <a
<a class="btn btn-success"
class="btn btn-success" href="/dashboard/book-loans/{{ loan.id }}/update/"
href="/dashboard/book-loans/{{ loan.id }}/update/" >
> <i class="bi bi-pencil-square"></i>
<i class="bi bi-pencil-square"></i> </a>
</a> <button
<button class="btn btn-danger"
class="btn btn-danger" data-bs-toggle="modal"
data-bs-toggle="modal" data-bs-target="#book_loan_delete_modal_{{ loan.id }}"
data-bs-target="#book_loan_delete_modal_{{ loan.id }}" >
> <i class="bi bi-trash3-fill"></i>
<i class="bi bi-trash3-fill"></i> </button>
</button> </td>
</td> </tr>
</tr> {% endfor %} {% else %}
{% endfor %} {% else %} <tr class="w-100">
<tr class="w-100"> <td></td>
<td></td> <td></td>
<td></td> <td></td>
<td></td> <td>
<td> <p>Data Empty</p>
<p>Data Empty</p> </td>
</td> <td></td>
<td></td> <td></td>
<td></td> <td></td>
<td></td> </tr>
</tr> {% endif %}
{% endif %} </tbody>
</tbody> </table>
</table> {% include "pagination.html" %}
</div>
...@@ -9,19 +9,41 @@ from django.shortcuts import render, get_object_or_404 ...@@ -9,19 +9,41 @@ from django.shortcuts import render, get_object_or_404
from book_loans.models import Book, BookLoans from book_loans.models import Book, BookLoans
from members.models import Members from members.models import Members
from book_loans.forms import BookLoanForm from book_loans.forms import BookLoanForm
from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage
def index(request): def index(request):
latest_book_loan_list = BookLoans.objects.order_by("-created_at")[:10] book_loan_lists = BookLoans.objects.all()
books = Book.objects.all() books = Book.objects.all()
member = Members.objects.all() member = Members.objects.all()
context = { context = {
"book_loans": latest_book_loan_list, "book_loans": book_loan_lists,
"form": BookLoanForm(), "form": BookLoanForm(),
"books": books, "books": books,
"members": member, "members": member,
} }
default_page = 1
page = request.GET.get("page", default_page)
items_per_page = 5
paginator = Paginator(book_loan_lists, items_per_page)
try:
page_obj = paginator.page(page)
context["page_obj"] = page_obj
context["book_loans"] = page_obj
cache.clear()
except PageNotAnInteger:
page_obj = paginator.page(default_page)
context["page_obj"] = page_obj
context["book_loans"] = page_obj
cache.clear()
except EmptyPage:
page_obj = paginator.page(paginator.num_pages)
context["page_obj"] = page_obj
context["book_loans"] = page_obj
cache.clear()
if request.method == "POST": if request.method == "POST":
form = BookLoanForm(request.POST) form = BookLoanForm(request.POST)
if form.is_valid: if form.is_valid:
...@@ -74,12 +96,12 @@ def index(request): ...@@ -74,12 +96,12 @@ def index(request):
def update(request, id): def update(request, id):
latest_book_loan_list = BookLoans.objects.order_by("created_at")[:10] book_loans = BookLoans.objects.order_by("created_at")[:10]
loan = get_object_or_404(BookLoans, id=id) loan = get_object_or_404(BookLoans, id=id)
books = Book.objects.all() books = Book.objects.all()
member = Members.objects.all() member = Members.objects.all()
context = { context = {
"book_loans": latest_book_loan_list, "book_loans": book_loans,
"loan": loan, "loan": loan,
"books": books, "books": books,
"members": member, "members": member,
......
...@@ -46,3 +46,4 @@ ...@@ -46,3 +46,4 @@
{% endif %} {% endif %}
</tbody> </tbody>
</table> </table>
{% include "pagination.html" %}
...@@ -4,11 +4,12 @@ from django.views.decorators.cache import cache_page ...@@ -4,11 +4,12 @@ from django.views.decorators.cache import cache_page
from django.conf import settings from django.conf import settings
urlpatterns = [ urlpatterns = [
path( # path(
"", # "",
cache_page(settings.CACHE_TTL, key_prefix="books")(index), # cache_page(settings.CACHE_TTL, key_prefix="books")(index),
name="book_list", # name="book_list",
), # ),
path("", index, name="book_list"),
path("<int:id>/update/", update, name="book_update"), path("<int:id>/update/", update, name="book_update"),
path("<int:id>/delete/", delete, name="book_delete"), path("<int:id>/delete/", delete, name="book_delete"),
] ]
from django.shortcuts import get_object_or_404, render from django.shortcuts import get_object_or_404, render
from django.core.cache import cache from django.core.cache import cache
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect
from datetime import datetime from datetime import datetime
from django.db.models import Q from django.db.models import Q
from books.models import Book from books.models import Book
from books.forms import BookForm from books.forms import BookForm
from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage
def index(request): def index(request):
context = {"form": BookForm()} context = {"form": BookForm()}
latest_book_list = Book.objects.order_by("-created_at")[:10] books = Book.objects.all()
context["books"] = latest_book_list
default_page = 1
page = request.GET.get("page", default_page)
items_per_page = 5
paginator = Paginator(books, items_per_page)
try:
page_obj = paginator.page(page)
context["page_obj"] = page_obj
context["books"] = page_obj
cache.clear()
except PageNotAnInteger:
page_obj = paginator.page(default_page)
context["page_obj"] = page_obj
context["books"] = page_obj
cache.clear()
except EmptyPage:
page_obj = paginator.page(paginator.num_pages)
context["page_obj"] = page_obj
context["books"] = page_obj
cache.clear()
if request.method == "POST": if request.method == "POST":
form = BookForm(request.POST) form = BookForm(request.POST)
......
<nav aria-label="Page navigation example"> <nav aria-label="Page navigation example">
<ul class="pagination"> <ul class="pagination">
<li class="page-item"><a class="page-link" href="#">Previous</a></li> {% if page_obj.has_previous %}
<li class="page-item"><a class="page-link" href="#">1</a></li> <li class="page-item">
<li class="page-item"><a class="page-link" href="#">2</a></li> <a class="page-link" href="?page={{ page_obj.previous_page_number }}"
<li class="page-item"><a class="page-link" href="#">3</a></li> >Previous</a
<li class="page-item"><a class="page-link" href="#">Next</a></li> >
</li>
{% else %}
<li class="page-item">
<a class="page-link disabled" href="#">Previous</a>
</li>
{% endif %} {% for index in page_obj.paginator.page_range %}
<li class="page-item {% if page_obj.number == index %}active{% endif %}">
<a class="page-link" href="?page={{ index }}">{{ index }}</a>
</li>
{% endfor %} {% if page_obj.has_next %}
<li class="page-item">
<a class="page-link" href="?page={{ page_obj.next_page_number }}"
>Next</a
>
</li>
{% else %}
<li class="page-item">
<a class="page-link disabled" href="#">Next</a>
</li>
{% endif %}
</ul> </ul>
</nav> </nav>
...@@ -44,3 +44,4 @@ ...@@ -44,3 +44,4 @@
{% endif %} {% endif %}
</tbody> </tbody>
</table> </table>
{% include "pagination.html" %}
from authentications.utils import create_auth_session, Hasher from authentications.utils import Hasher
from django.shortcuts import get_object_or_404, render from django.shortcuts import get_object_or_404, render
from django.core.cache import cache from django.core.cache import cache
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect
...@@ -7,11 +7,33 @@ from datetime import datetime ...@@ -7,11 +7,33 @@ from datetime import datetime
from librarians.models import Librarians from librarians.models import Librarians
from librarians.forms import LibrarianForm from librarians.forms import LibrarianForm
from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage
def index(request): def index(request):
latest_librarian_list = Librarians.objects.order_by("created_at")[:10] librarians = Librarians.objects.all()
context = {"librarians": latest_librarian_list, "form": LibrarianForm()} context = {"librarians": librarians, "form": LibrarianForm()}
default_page = 1
page = request.GET.get("page", default_page)
items_per_page = 5
paginator = Paginator(librarians, items_per_page)
try:
page_obj = paginator.page(page)
context["page_obj"] = page_obj
context["librarians"] = page_obj
cache.clear()
except PageNotAnInteger:
page_obj = paginator.page(default_page)
context["page_obj"] = page_obj
context["librarians"] = page_obj
cache.clear()
except EmptyPage:
page_obj = paginator.page(paginator.num_pages)
context["page_obj"] = page_obj
context["librarians"] = page_obj
cache.clear()
if request.method == "POST": if request.method == "POST":
form = LibrarianForm(request.POST) form = LibrarianForm(request.POST)
......
<table class="table table-hover">
<table class="table table-hover"> <thead>
<thead> <tr class="table-primary">
<tr class="table-primary"> <th scope="col">Name</th>
<th scope="col">Name</th> <th scope="col">Email</th>
<th scope="col">Email</th> <th scope="col">Created At</th>
<th scope="col">Created At</th> <th scope="col">Updated At</th>
<th scope="col">Updated At</th> <th scope="col">Account Number</th>
<th scope="col">Account Number</th> <th scope="col"></th>
<th scope="col"></th> </tr>
</tr> </thead>
</thead> <tbody>
<tbody> {% if members %} {% for member in members %}
{% if members %} {% for member in members %} <tr class="text-truncate">
<tr class="text-truncate"> <td>{{ member.name }}</td>
<td>{{ member.name }}</td> <td>{{ member.email }}</td>
<td>{{ member.email }}</td> <td>{{ member.created_at }}</td>
<td>{{ member.created_at }}</td> <td>{{ member.updated_at }}</td>
<td>{{ member.updated_at }}</td> <td>{{ member.account_number }}</td>
<td>{{ member.account_number }}</td> <td class="d-flex gap-2">
<td class="d-flex gap-2"> <a
<a class="btn btn-success"
class="btn btn-success" href="/dashboard/members/{{ member.id }}/update/"
href="/dashboard/members/{{ member.id }}/update/" >
> <i class="bi bi-pencil-square"></i>
<i class="bi bi-pencil-square"></i> </a>
</a> <button
<button class="btn btn-danger"
class="btn btn-danger" data-bs-toggle="modal"
data-bs-toggle="modal" data-bs-target="#member_delete_modal_{{ member.id }}"
data-bs-target="#member_delete_modal_{{ member.id }}" >
> <i class="bi bi-trash3-fill"></i>
<i class="bi bi-trash3-fill"></i> </button>
</button> </td>
</td> </tr>
</tr> {% endfor %} {% else %}
{% endfor %} {% else %} <tr class="w-100">
<tr class="w-100"> <td></td>
<td></td> <td></td>
<td></td> <td></td>
<td></td> <td>
<td> <p>Data Empty</p>
<p>Data Empty</p> </td>
</td> <td></td>
<td></td> <td></td>
<td></td> </tr>
</tr> {% endif %}
{% endif %} </tbody>
</tbody> </table>
</table> {% include "pagination.html" %}
</div>
...@@ -6,11 +6,33 @@ from datetime import datetime ...@@ -6,11 +6,33 @@ from datetime import datetime
from members.models import Members from members.models import Members
from members.forms import MemberForm from members.forms import MemberForm
from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage
def index(request): def index(request):
latest_memeber_list = Members.objects.order_by("created_at")[:10] members = Members.objects.order_by("created_at")[:10]
context = {"members": latest_memeber_list, "form": MemberForm()} context = {"members": members, "form": MemberForm()}
default_page = 1
page = request.GET.get("page", default_page)
items_per_page = 5
paginator = Paginator(members, items_per_page)
try:
page_obj = paginator.page(page)
context["page_obj"] = page_obj
context["members"] = page_obj
cache.clear()
except PageNotAnInteger:
page_obj = paginator.page(default_page)
context["page_obj"] = page_obj
context["members"] = page_obj
cache.clear()
except EmptyPage:
page_obj = paginator.page(paginator.num_pages)
context["page_obj"] = page_obj
context["members"] = page_obj
cache.clear()
if request.method == "POST": if request.method == "POST":
form = MemberForm(request.POST) form = MemberForm(request.POST)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment