Commit 9bae7a9f authored by impfundev's avatar impfundev

feat: pagination

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