Нумерация объектов обратной страницы Django

#django #reverse #paginator

Вопрос:

Я использую {{ forloop.counter0|add:page_obj.start_index }} И получаю (разбиение на страницы 3):

 Page1: 1  Page2: 4
       2         5
       3
 

Если я использую {{ forloop.revcounter0|add:page_obj.start_index }}
Я получаю:

 Page1: 3  Page2: 5
       2         4
       1
 

Как я могу получить:

 Page1: 5  Page2: 2
       4         1
       3
 

Я думал о чем-то вроде {{ paginator.count|add:SOMETHING }}

Комментарии:

1. Поделитесь своим мнением.

Ответ №1:

Лучшим решением было бы написать для этого пользовательский тег шаблона. В каком-нибудь вашем подходящем приложении создайте каталог templatetags.py , а также добавьте __init__.py в него файл. Внутри каталога создайте новый файл, в котором мы будем писать теги шаблонов, скажем pagination_extras.py . После этого ваша структура каталогов будет выглядеть примерно так:

 <appname>/
    __init__.py
    models.py
    templatetags/
        __init__.py
        pagination_extras.py
    views.py
 

Теперь в pagination_extras.py разделе создайте пользовательский тег шаблона, чтобы выполнить этот расчет за вас:

 from django import template

register = template.Library()

@register.simple_tag
def pagination_reverse_numbering(paginator, page_obj, loop_count):
    return paginator.count - page_obj.start_index() - loop_count   1
 

Теперь в вашем шаблоне вы сначала загрузите этот тег, а затем используйте его для выполнения нумерации:

 {% load pagination_extras %}
...
{% for item in page_obj %}
    {% pagination_reverse_numbering paginator page_obj forloop.counter0 %}
{% endfor %}