Create: paginations

This commit is contained in:
Stepan Zhukovsky 2023-07-29 16:36:08 +09:00
parent 96ae8647e1
commit e2b523a456
5 changed files with 103 additions and 55 deletions

View File

@ -82,6 +82,9 @@ class Ticket(models.Model):
platform = models.ForeignKey('Platform', on_delete=models.CASCADE) platform = models.ForeignKey('Platform', on_delete=models.CASCADE)
user = models.ForeignKey(User, on_delete=models.CASCADE) user = models.ForeignKey(User, on_delete=models.CASCADE)
class Meta:
ordering = ['-time_update']
def get_absolute_url(self): def get_absolute_url(self):
return reverse( return reverse(
'ticket', 'ticket',

View File

@ -1,58 +1,62 @@
<header> <header>
<nav class="navbar navbar-expand-lg bg-body-tertiary"> <section>
<div class="container"> <nav class="navbar navbar-expand-lg bg-body-tertiary">
<a class="navbar-brand" href="{% url 'index' %}">Logs Collector</a> <div class="container">
<button <a class="navbar-brand" href="{% url 'index' %}">Logs Collector</a>
class="navbar-toggler" <button
type="button" class="navbar-toggler"
data-bs-toggle="collapse" type="button"
data-bs-target="#navbarSupportedContent" data-bs-toggle="collapse"
aria-controls="navbarSupportedContent" data-bs-target="#navbarSupportedContent"
aria-expanded="false" aria-controls="navbarSupportedContent"
aria-label="Переключатель навигации" aria-expanded="false"
> aria-label="Переключатель навигации"
<span class="navbar-toggler-icon"></span> >
</button> <span class="navbar-toggler-icon"></span>
<div class="collapse navbar-collapse" id="navbarSupportedContent"> </button>
<ul class="navbar-nav ml-auto mb-2 mb-lg-0"> <div class="collapse navbar-collapse" id="navbarSupportedContent">
<li class="nav-item dropdown"> <ul class="navbar-nav ml-auto mb-2 mb-lg-0">
<a <li class="nav-item dropdown">
class="nav-link dropdown-toggle" <a
href="#" class="nav-link dropdown-toggle"
role="button" href="#"
data-bs-toggle="dropdown" role="button"
aria-expanded="false" data-bs-toggle="dropdown"
>Tickets</a> aria-expanded="false"
<ul class="dropdown-menu"> >Tickets</a
<li> >
<a class="dropdown-item" href="{% url 'index' %}">All</a> <ul class="dropdown-menu">
</li> <li>
{% for platform in platforms %} <a class="dropdown-item" href="{% url 'index' %}">All</a>
<li> </li>
<a {% for platform in platforms %}
class="dropdown-item" <li>
href="{{ platform.get_absolute_url }}" <a
>{{ platform.pretty_name}}</a> class="dropdown-item"
</li> href="{{ platform.get_absolute_url }}"
{% endfor %} >{{ platform.pretty_name}}</a
<li><hr class="dropdown-divider" /></li> >
<li><a class="dropdown-item" href="#">Create ticket</a></li> </li>
</ul> {% endfor %}
</li> <li><hr class="dropdown-divider" /></li>
<li class="nav-item"> <li><a class="dropdown-item" href="#">Create ticket</a></li>
<a class="nav-link disabled">Отключенная</a> </ul>
</li> </li>
</ul> <li class="nav-item">
<form class="d-flex" role="search"> <a class="nav-link disabled">Отключенная</a>
<input </li>
class="form-control me-2" </ul>
type="search" <form class="d-flex" role="search">
placeholder="Поиск" <input
aria-label="Поиск" class="form-control me-2"
/> type="search"
<button class="btn btn-outline-success" type="submit">Поиск</button> placeholder="Поиск"
</form> aria-label="Поиск"
/>
<button class="btn btn-outline-success" type="submit">Поиск</button>
</form>
</div>
</div> </div>
</div> </nav>
</nav> </section>
</header> </header>

View File

@ -0,0 +1,37 @@
{% if page_obj.has_other_pages %}
<nav class="d-flex justify-content-center mt-3" aria-label="...">
<ul class="pagination">
{% if page_obj.has_previous %}
<li class="page-item">
<a
class="page-link"
href="?page={{ page_obj.previous_page_number }}"
>Back</a>
</li>
{% else %}
<li class="page-item disabled"><a class="page-link">Back</a></li>
{% endif %}
{% for page in paginator.page_range %}
{% if page_obj.number == page %}
<li class="page-item active" aria-current="page">
<button class="page-link">{{ page }}</button>
</li>
{% elif page >= page_obj.number|add:-2 and page <= page_obj.number|add:2%}
<li class="page-item">
<a class="page-link" href="?page={{ page }}">{{ page }}</a>
</li>
{% endif %}
{% 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 disabled"><a class="page-link">Next</a></li>
{% endif %}
</ul>
</nav>
{% endif %}

View File

@ -91,7 +91,9 @@
</div> </div>
</div> </div>
{% endfor %} {% endfor %}
{% include 'collector/pagination.html' %}
</div> </div>
</section> </section>
</main> </main>
{% endblock content %} {% endblock content %}

View File

@ -21,6 +21,7 @@ class ListAllTickets(generic.ListView):
model = Ticket model = Ticket
template_name = 'collector/tickets.html' template_name = 'collector/tickets.html'
context_object_name = 'tickets' context_object_name = 'tickets'
paginate_by = 5
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
@ -33,6 +34,7 @@ class ListPlatformTickets(generic.ListView):
template_name = 'collector/tickets.html' template_name = 'collector/tickets.html'
context_object_name = 'tickets' context_object_name = 'tickets'
allow_empty = False allow_empty = False
paginate_by = 5
def get_queryset(self): def get_queryset(self):
return Ticket.objects.filter( return Ticket.objects.filter(