You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

2.9 KiB

Работа с представлениями

При разработке представлений мне пришлось реализовать несколько алгоритмов, которых нет в поставке Django. Они связаны с особенностями реализации системы.

Пагинатор

Есть реализованный шаблон для пагинации. При использовании Class Based View, в шаблоне вы можете включить страницу templates/pagination.html.

Например вы создали клас представления:

from django.views.generic import ListView

class PaysListView(ListView):
    ...
    pass

Тогда в шаблоне с bootstrap вы можете увидеть примерно такую пагинацию которую вы конечно же можете изменить на свою. paginator.

Сортировка по полям объектов из списка

Для того чтоб иметь возможность сортировать по полю объекта из списка, в шаблоне нужно передать имя поля по которому нужна сортировка и направление сортировки.

На примере 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. Определение представления с сортировкой будет выглядеть так:

from django.views.generic import ListView
from djing.global_base_views import OrderingMixin

class PaysListView(ListView, OrderingMixin):
    ...
    pass

Примесь OrderingMixin добавляет в контекст переменные order_by и dir для использования в шалоне.