#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 %}