Browse Source
Refactoring vedapp.views.devices view to ClassBasedView.
Refactoring vedapp.views.devices view to ClassBasedView.
Also add OrderingMixin for ordering. And update ordering template. Changed files in commit changed: README.md changed: devapp/templates/devapp/devices.html changed: devapp/urls.py changed: devapp/views.py changed: djing/global_base_views.py new file: docs/img/pagination.png new file: docs/views.md changed: mydefs.py new file: templates/toolbar_page_cbv.htmldevel
9 changed files with 148 additions and 29 deletions
-
1README.md
-
8devapp/templates/devapp/devices.html
-
2devapp/urls.py
-
53devapp/views.py
-
30djing/global_base_views.py
-
BINdocs/img/pagination.png
-
56docs/views.md
-
1mydefs.py
-
26templates/toolbar_page_cbv.html
|
After Width: 223 | Height: 68 | Size: 1.3 KiB |
@ -0,0 +1,56 @@ |
|||
# Работа с представлениями |
|||
|
|||
При разработке представлений мне пришлось реализовать несколько алгоритмов, которых |
|||
нет в поставке Django. Они связаны с особенностями реализации системы. |
|||
|
|||
* [Пагинатор](#markdown-header-пагинатор) |
|||
* [Сортировка по полям объектов из списка](markdown-header-сортировка-по-полям-объектов-из-списка) |
|||
|
|||
|
|||
### Пагинатор |
|||
Есть реализованный шаблон для пагинации. При использовании [Class Based View](https://docs.djangoproject.com/en/1.11/topics/class-based-views/), |
|||
в шаблоне вы можете включить страницу *templates/toolbar_page_cbv.html*. |
|||
|
|||
Например вы создали клас представления: |
|||
|
|||
```python |
|||
from django.views.generic import ListView |
|||
|
|||
class PaysListView(ListView): |
|||
... |
|||
pass |
|||
|
|||
``` |
|||
|
|||
Тогда в шаблоне с bootstrap вы можете увидеть примерно такую пагинацию которую |
|||
вы конечно же можете изменить на свою. |
|||
. |
|||
|
|||
|
|||
### Сортировка по полям объектов из списка |
|||
Для того чтоб иметь возможность сортировать по полю объекта из списка, в шаблоне нужно передать |
|||
имя поля по которому нужна сортировка и направление сортировки. |
|||
|
|||
На примере *devapp/devices.html* можно рассмотреть такую сортировку. |
|||
Там указан url с параметрами |
|||
> {% url 'devapp:devs' group.pk %}?order_by=ip_address&dir={{ dir|default:'down' }} |
|||
|
|||
Тут обратная сортировка по полю *ip_address*, со знаком -. То есть эквивалент будет выглядеть примерно так: |
|||
> Device.objects.all().order_by('-ip_address') |
|||
|
|||
После того как вы отсортируете один раз, направление поменяется, в переменную dir будет передано |
|||
значение *up*, и сортировка пройдёт без знака - |
|||
|
|||
В то же время ваше представление нужно отнаследовать от OrderingMixin из *djing.global_base_views*. |
|||
Определение представления с сортировкой будет выглядеть так: |
|||
|
|||
```python |
|||
from django.views.generic import ListView |
|||
from djing.global_base_views import OrderingMixin |
|||
|
|||
class PaysListView(ListView, OrderingMixin): |
|||
... |
|||
pass |
|||
``` |
|||
|
|||
Примесь *OrderingMixin* добавляет в контекст переменные *order_by* и *dir* для использования в шалоне. |
|||
@ -0,0 +1,26 @@ |
|||
{% if paginator.num_pages > 1 %} |
|||
{% load dpagination %} |
|||
<div class="row"> |
|||
<div class="col-sm-4 col-sm-offset-4"> |
|||
<ul class="pagination"> |
|||
{% if page_obj.number == 1 %} |
|||
<li class="disabled"><a href="#">«</a></li> |
|||
{% else %} |
|||
<li><a href="?{% url_page_replace request 'page' 1 %}">«</a></li> |
|||
{% endif %} |
|||
{% if page_obj.has_previous %} |
|||
<li><a href="?{% url_page_replace request 'page' page_obj.previous_page_number %}">{{ page_obj.previous_page_number }}</a></li> |
|||
{% endif %} |
|||
<li class="disabled"><a href="#">{{ page_obj.number }}</a></li> |
|||
{% if page_obj.has_next %} |
|||
<li><a href="?{% url_page_replace request 'page' page_obj.next_page_number %}">{{ page_obj.next_page_number }}</a></li> |
|||
{% endif %} |
|||
{% if page_obj.number == paginator.num_pages %} |
|||
<li class="disabled"><a href="#">»</a></li> |
|||
{% else %} |
|||
<li><a href="?{% url_page_replace request 'page' paginator.num_pages %}">»</a></li> |
|||
{% endif %} |
|||
</ul> |
|||
</div> |
|||
</div> |
|||
{% endif %} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue